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
Это репост с сайта http://tolik-punkoff.com
Оригинал: http://tolik-punkoff.com/2018/10/03/sxge
Page Summary
October 2025
|
SxGeoSharp. Интерфейс на C# для базы данных SypexGeo. — Содержание
SxGeoSharp. Интерфейс на C# для базы данных SypexGeo. - Приложение
Код для отладки (тест работы со справочниками, распаковки "универсального формата" и загрузка справочников в DataSet )Спецификация формата SxGeo Копия https://github.com/tolik-punkoff/sxgeosh БД Cypex Geo (с) 2012-2018 БИННОВАТОР SxGeoSharp: Идея: Leha Silent (Tolik-punkoff/Chaossoft/ОИМ) Реализация: Werwolf aka PunkArr[] aka IogSohoth (Tolik-punkoff/Wildsoft/ОИМ) Спонсор: OpPosition (ОИМ) Слава Украине! Это репост с сайта http://tolik-punkoff.com Оригинал: http://tolik-punkoff.com/2018/10/02/sxge SxGeoSharp. Интерфейс на C# для базы данных SypexGeo. - Часть IV. Получение данных.
Закончим с SxGeoCountry, в которой нет справочников и информации кроме ID страны. В оригинальном исходнике есть массив с кодами стран, а позиция в массиве, как раз ID страны из базы. Соответственно, надо просто сходить в нужный элемент массива за ISO-кодом страны. Сделаем соответствующую функцию private string IdToIso(uint ID) Тут все просто, мы должны либо взять определенное количество байт из массива (на это дело есть bSubstr ), либо прочиатать данные с диска. На это у нас есть поток SxStream и все позиции - start - откуда начинать читать, seek - сдвиг в файле, и max - максимальная длина записи в байтах.( Читать далее... )Это репост с сайта http://tolik-punkoff.com Оригинал: http://tolik-punkoff.com/2018/10/02/sxge SxGeoSharp. Интерфейс на C# для базы данных SypexGeo. - Часть III. Универсальный формат упаковки дан
Данные в справочниках хранятся в "универсальном формате упаковки данных", каждая запись идет последовательно, без разделителей. Сама запись имеет переменный размер, и состоит как из бинарных, так и из строковых данных. Вот тут разработчиками был подложен второй поросеночек - прочитать записи переменной длины и загрузить их в удобный SxGeoSharp. Интерфейс на C# для базы данных SypexGeo. - Часть II. Поиск.
Итак, наша основная задача вообще-то найти регион (страну, город) соответствующего IP-адреса. Вот этим и займемся. Точнее, найдем либо ID страны, либо смещение в файле БД, откуда потом вытащим данные. Этот функционал реализован в функции 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... ) Это репост с сайта http://tolik-punkoff.com Оригинал: http://tolik-punkoff.com/2018/09/27/sxge |