SxGeoSharp. Интерфейс на C# для базы данных SypexGeo. Часть I — инициализация (и введение)

Преамбула

Проект SypexGeo это автономная файловая бинарная база данных, хранящая IPv4 адреса, и позволяющая определить их географическую привязку, а также, соответствующий PHP-скрипт, позволяющий использовать ее на своем сайте, для определения страны и города по IP.
Примеры использования в блоге уже неоднократно описывались.
Мне понадобилось ее использовать на машине без интернета, для того, чтобы анализировать некоторые логи, на PHP (консольном) получалось довольно неуклюже и неудобно, поставить web-сервер не было возможности, потому подумал и решил, почему бы не расковырять базу, благо формат открыт, и не прикрутить к своим программам интерфейс на C#.
Сразу говорю, текст будет довольно длинный и нудный, поскольку это еще и что-то типа технической документации в вольной форме, написанной по работе, вдруг кто-то косяки поправит или кому-то понадобится.
Написан этот интерфейс наверняка не оптимально, и наверняка требует доработки. Спецификация формата написана довольно скупо, так что о кое-каких вещах приходилось догадываться, где-то, правда в мелочах, было наврано, где-то приходилось подглядывать в исходник от создателей (на PHP), где-то даже расчехлить hiew, а где-то переделывать PHP алгоритмы под C#. Это собой отдельную трудность представляло, потому что в PHP вся работа с типами благополучно переложена на интерпретатор, и PHP легко может работать с числом или с массивом байт, как со строкой, и наоборот.

Спецификация формата доступна на официальном сайте

SxGeoSharp работает с бесплатными вариантами базы SxGeoCountry (SxGeo.dat) и SxGeoCity (SxGeoCity.dat) версии 2.2 (Unicode, Windows-1251 и теоретически Latin-1). Платных вариантов баз не было, кому надо чтобы было — пишите в комментарии, договоримся.
Read more…

4 Responses to SxGeoSharp. Интерфейс на C# для базы данных SypexGeo. Часть I — инициализация (и введение)

  1. Pingback: SxGeoSharp. Интерфейс на C# для базы данных SypexGeo. — Содержание | Персональный блог Толика Панкова

  2. Здравствуйте, Анатолий! Ваши статьи очень мне помогли разобраться с базой данных Sypex Geo. Однако остался один вопрос, из-за которого никак не могу продвинуться дальше в разработке похожего парсера. В моем случае необходимо распарсить всю базу и превратить ее в читабельную базу данных. Остановился на моменте получения смещения в байтах для записи города. То есть у меня есть ip, который имеется в базе. Есть соответствующий блок из диапазонов. Как я понимаю, id, которое указывается после 3 байт диапазона, и так же состоит из 3 байт должно показывать, на сколько байт нужно сместиться от начала блока с городами. Однако при переводе id в число получается близкое к нужному значению, но не равное ему. Я использую SxGeoCity. Главный вопрос, как получить смещение для записи с городом.

    • Блин, я уже забыл что там надо делать, но где-то был исходник на C#, со всякими экспериментами. ЕМНИС, там фишка в том, что чтобы разобрать справочник в читабельную форму, надо где-то подправить смещение. Впрочем, скажите мне что вам надо, и я вам сие сделаю.

    • И да, вы всегда можете написать мне в Телеграм @eternalsavage я вас в онлайн прямо и проконсультирую, не стесняйтесь, пишите

Добавить комментарий для Алексей Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *