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

623

Дата останнього оновлення: 30-5-19 21:05:27


 

alt CodeTyphon

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