Российская география
Гео-база maxmind окончательно задолбала своими приколами, когда треть Москвы определяется как область в Великобритании. Могу себе представить как она определяет географию для других городов России. В поисках нормальной базы ip-адресов России нашёл ipgeobase.ru. Бесплатная, поддерживаемая, актуальная база для России. Но когда дело дошло до парсинга, меня её формат взбесил. Вместо того, чтобы сделать так, как делают те же maxmind, где последовательно располагаются блоки адресов, они реализовали структуру со множественными вложениями, парсер для которой, без поллитра не напишешь.
Поломав голову над парсером, я его родил и решил выложить доработанный скрипт для тех, кому не хочется мучаться самому
Скачать скрипт можно тут: ipgeobase.php.gz.
Для работы скрипта нужен файл cidr_ru_block.txt из архива db_files.tar.gz. Запускаться скрипт должен в том же каталоге, что и cidr_ru_block.txt. После работы скрипта появляются 3 файла: ipgeobase-states.dat, ipgeobase-cities.dat, ipgeobase-ips.dat.
В ipgeobase-states.dat храняться области в формате [идентификатор области]\t[название области].
В ipgeobase-cities.dat храняться города в формате [идентификатор города]\t[идентификатор области]\t[название города].
В ipgeobase-ips.dat храняться диапазоны ip-адресов в формате [IP от]\t[IP до]\t[идентификатор области]\t[идентификатор города].
При повторном запуске скрипт начитывает данные из ipgeobase-states.dat и ipgeobase-cities.dat (если они есть). Таким образом, при появлении новых городов или областей, идентификаторы “старых” записей не изменятся. IP храняться в виде беззнакового 32-битного числа.
Как-то так, надеюсь кому-то мой труд облегчит жизнь
Tags: ipgeobase, maxmind, география, программирование



как самому сделать cidr_ru_block.txt
к примеру из GeoIPCity.dat Maxmind
А зачем конвертить в cidr_ru_block.txt из, например, GeoIPCity.dat Maxmind?
Я сделал парсер, который сразу пихает информацию в базу данных (структура таблиц почти в точности как у ваших dat файлов). Получилось гораздо компактнее (хранимка - 22 строки, скрипт - 30 строк).
PS: такая реализация парсера не требует поллитры и делается в полпинка
Cykooz: в том-то и дело, что мне нужно в виде файла, а не в базе. После из этих файлов собирается “общая география” для демона.
Запустил скрипт, некоторые адреса затерялись. К примеру блок 188.162.40.0 - 188.162.47.255
Сейчас ищу ошибку
А нет, все работает, спасибо за парсер.
Оригинально пишете. С огромным удовольствием читаю Ваши публикации.