en EN   ru RU

Главная

ОС 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

210

Дата последнего обновления: 7-2-16 18:18:52


 

alt CodeTyphon

Copyright © 2005-2017 SAGE. Все права защищены.