en EN   ru RU   uk UK

Головна

ОС A2

ДРАКОН

Arduino

Програми

Утиліти

Веб-утиліти

FontReg

Посилання

Веб-майстру

Зв'язок з автором

Резюме


A2 OS forum

 
  Версія для друку

Веб-утиліти


Визначення країни по IP

SAGE


Утиліта CountryByIPv4 виводить дволітерний код країни і назва країни по заданому IPv4 адресою.

Використовується IP2Location™ IP-COUNTRY (DB1) база даних в CSV форматі. Безкоштовний варіант бази DB1.LITE доступний для вільного скачування [1].

Утиліта писалася для приблизною оцінки часу, скільки займе парсинг подібного CSV файлу.

В першому варіанті реалізації читання CSV файлу здійснювалося в TStringList, потім Парс рядки з TStringList одна за інший. Подібним чином читаються CSV файли, наприклад, в компоненті TjanSQL.

Потім я відмовився від TStringList і став читати файл просто в рядок з наступним парсинга з цієї рядки. Це збільшило швидкість роботи трохи більше ніж в 2 рази.

Потім я зрозумів, що дуже багато часу витрачається на копіювання подстрок з рядки (Copy()) і на переклад рядків в числа (Val()). Я відмовився від перекладу рядків в числа, IP-адреси залишаються в строчном поданні (в такому вигляді як вони зберігаються в CSV). При пошуку IP-адреси в базі відбувається порівняння рядків замість порівняння чисел. Для цього необхідно домогтися однаковою довжини сатиричного подання всіх IPадрес. Адреси коротше 10 символів доповнюються зліва нулями. Заміри часу виконання пошуку показали, що швидкість пошуку практично Не зменшилася і становить 0-2 мс.

Що стосується, кодів і назв країн, то необхідність в зверненні до ним виникає тільки в випадку якщо IP-адреса знайдений в базі! Отже, навіщо витрачати час на копіювання всіх кодів і назв країн при парсінгу? Я замінив поля коду і назви країни на значення позиції рядки в оригінальної CSV базі і довжини рядки. Ці хитрощі знову збільшили швидкість роботи трохи більше ніж в 2 рази. Разом, по-сравнеію з першим варіантом, швидкість вдалося збільшити приблизно в 4.2 рази!

В архіві додається вихідний код всіх трьох варіантів утиліти для CodeTyphon

Результат запуску останньої версії утиліти (система: AMD A10-7850K @ 3.70 GHz, DDR3 PC3-12800 @ 1.2 GHz):

c:\>CountryByIPv4.exe 202.186.13.4
CSV database parsed in 0,043 s, 130348 rows
IP address found in 0,002 s, country code: MY, name: Malaysia

c:\>CountryByIPv4.exe 19.5.10.1
CSV database parsed in 0,043 s, 130348 rows
IP address found in 0,000 s, country code: US, name: United States

c:\>CountryByIPv4.exe 25.5.10.2
CSV database parsed in 0,043 s, 130348 rows
IP address found in 0,000 s, country code: GB, name: United Kingdom

c:\>CountryByIPv4.exe 43.5.10.3
CSV database parsed in 0,043 s, 130348 rows
IP address found in 0,000 s, country code: JP, name: Japan

c:\>CountryByIPv4.exe 47.5.10.4
CSV database parsed in 0,043 s, 130348 rows
IP address found in 0,000 s, country code: CA, name: Canada

c:\>CountryByIPv4.exe 51.5.10.5
CSV database parsed in 0,042 s, 130348 rows
IP address found in 0,000 s, country code: DE, name: Germany

c:\>CountryByIPv4.exe 53.5.10.6
CSV database parsed in 0,043 s, 130348 rows
IP address found in 0,000 s, country code: DE, name: Germany

c:\>CountryByIPv4.exe 80.5.10.7
CSV database parsed in 0,043 s, 130348 rows
IP address found in 0,001 s, country code: GB, name: United Kingdom

c:\>CountryByIPv4.exe 81.5.10.8
CSV database parsed in 0,043 s, 130348 rows
IP address found in 0,001 s, country code: IL, name: Israel

c:\>CountryByIPv4.exe 83.5.10.9
CSV database parsed in 0,042 s, 130348 rows
IP address found in 0,001 s, country code: PL, name: Poland

c:\>CountryByIPv4.exe 85.5.10.0
CSV database parsed in 0,043 s, 130348 rows
IP address found in 0,001 s, country code: CH, name: Switzerland

Використані джерела:

[1] Free IP2Location LITE IP-COUNTRY.



Тип

Ім'я

Розмір

Завантажень

zip

CountryByIPv4.zip

229 KiB

704

Дата останнього оновлення: 23-2-20 18:24:57


 

alt CodeTyphon

Copyright © 2005-2020 SAGE. Всі права захищено.