SxGeoSharp. Интерфейс на C# для базы данных SypexGeo. — Содержание

SxGeoSharp. Интерфейс на C# для базы данных SypexGeo. Часть I — инициализация (и введение)
     -Преамбула
     -Общая структура БД
     -Заголовок базы данных
     -Дополнительные перечисления и мелкая корректировка с придирками.
     -Поля, свойства и конструктор класса
     -Функции для чтения БД
     -Функции для чтения заголовка
     -Закрытие базы данных
     -Открытие базы данных, чтение и проверка заголовка, чтение индексов.

SxGeoSharp. Интерфейс на C# для базы данных SypexGeo. — Часть II. Поиск.
     -Трехбайтовые числа
     -Байтовый substr
     -Поиск ID или смещения в «Диапазонах IP»
     -Функция поиска в «Диапазонах» (SearchDB)

SxGeoSharp. Интерфейс на C# для базы данных SypexGeo. — Часть III. Универсальный формат упаковки данных и получение данных из справочников.
     -Приведение типов
     -Анализ (распаковка) записи
     -Обработка полей записи
     -Дополнительные функции

SxGeoSharp. Интерфейс на C# для базы данных SypexGeo. — Часть IV. Получение данных.
     -Чтение информации из справочников
     -Поиск в справочнике по ID
     -Очистка ответа
     -Функция, формирующая финальный ответ.

SxGeoSharp. Интерфейс на C# для базы данных SypexGeo. — Приложение
     -Дополнительно
     -Источники
     -Код на GitHub
     -Создатели

Скачать все в PDF
SxGeoSharp на GitHub

SxGeoSharp. Интерфейс на C# для базы данных SypexGeo. — Приложение

Дополнительно.

Код для отладки (тест работы со справочниками, распаковки «универсального формата» и загрузка справочников в DataSet)

Источники

Спецификация формата SxGeo Копия

Код на GitHub

https://github.com/tolik-punkoff/sxgeosharp

Создатели

БД Cypex Geo (с) 2012-2018 БИННОВАТОР
SxGeoSharp:
Идея: Leha Silent (Tolik-punkoff/Chaossoft/ОИМ)
Реализация: Werwolf aka PunkArr[] aka IogSohoth (Tolik-punkoff/Wildsoft/ОИМ)
Спонсор: OpPosition (ОИМ)

Слава Украине!

SxGeoSharp. Интерфейс на C# для базы данных SypexGeo. -Часть IV. Получение данных.

Получение кода страны по ID (для БД SxGeoCountry)

Закончим с SxGeoCountry, в которой нет справочников и информации кроме ID страны.
В оригинальном исходнике есть массив с кодами стран, а позиция в массиве, как раз ID страны из базы. Соответственно, надо просто сходить в нужный элемент массива за ISO-кодом страны.
Сделаем соответствующую функцию private string IdToIso(uint ID)

Чтение информации из справочников

Тут все просто, мы должны либо взять определенное количество байт из массива (на это дело есть bSubstr), либо прочиатать данные с диска. На это у нас есть поток SxStream и все позиции — start — откуда начинать читать, seek — сдвиг в файле, и max — максимальная длина записи в байтах.Читать далее…

SxGeoSharp. Интерфейс на C# для базы данных SypexGeo. — Часть III. Универсальный формат упаковки данных и получение данных из справочников.

Данные в справочниках хранятся в «универсальном формате упаковки данных», каждая запись идет последовательно, без разделителей. Сама запись имеет переменный размер, и состоит как из бинарных, так и из строковых данных. Вот тут разработчиками был подложен второй поросеночек — прочитать записи переменной длины и загрузить их в удобный DataSet без бубна нельзя. Третий поросеночек, к сожалению, никак не отраженный в спецификации, был в том, что числовые данные в «универсальном формате» на самом деле в little-endian! Хотя в спецификации было указано, что данные хранятся в big-endian, и все работало до того момента, когда я не попытался прочитать данные из справочников.

Читать далее…

SxGeoSharp. Интерфейс на C# для базы данных SypexGeo. — Часть II. Поиск.

Итак, наша основная задача вообще-то найти регион (страну, город) соответствующего IP-адреса. Вот этим и займемся. Точнее, найдем либо ID страны, либо смещение в файле БД, откуда потом вытащим данные. Этот функционал реализован в функции
private uint SearchID(string IP).
Читать далее

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…