- PVSM.RU - https://www.pvsm.ru -

IP Tool — База данных IP адресов

Долгое время я пользовался библиотекой SxGeo от zapimir [1]. И до недавнего времени меня всё устраивало. Устраивало до тех пор, пока не было необходимости добавлять в БД свои данные.

Не найдя в интернете упаковщика данных от SxGeo и не найдя в себе силы требовать нужный мне функционал от разработчика, было принято решение писать свой костыль. Хотя на это решение повлиял и ещё 2 недостатка используемой библиотеки:

  • ограничение по количеству справочников;
  • невозможность узнать интервал адресов, в который входит искомый адрес;
  • отсутствие пакета в packagist.

Собственно, делюсь с вами своей разработкой [2].

Отличия между прототипом и моим решением:

  • IPTool — это всего лишь инструмент для создания базы данных и поиска в ней, в то время, как проект SxGeo — проект, предоставляющий не только инструментарий, но и сами базы данных;
  • База данных IPTool занимает больше места (т.к. первый адрес диапазона хранится полностью и занимает 4 байта, в то время, как в SxGeo только 3 байта);
  • IPTool имеет только один режим — чтение данных с диска (Режим подгрузки базы в память — в планах);
  • Помимо данных, IPTool возвращает диапазон IP адресов, в который входит искомый адрес;
  • IPTool предусматривает методы получения данных из справочников (всех или по порядковому номеру);
  • В базе данных IPTool предусмотрена возможность лицензирования самой базы данных;
  • IPTool легко устанавливается с помощью Composer [3];

Использование

Инициализация IP Tool

/* Путь к базе данных - /path/to/iptool.database */
$iptool = new DdrvIptoolIptool('/path/to/iptool.database');

Получение информации о базе данных

print_r($iptool->about());

Array
(
    [created] => 1507199627
    [author] => Anonymous Author
    [license] => MIT
    [networks] => Array
        (
            [count] => 276148
            [data] => Array
                (
                    [country] => Array
                        (
                            [0] => code
                            [1] => name
                        )
                )
        )
)

Поиск информации об IP адресе

print_r($iptool->find('81.32.17.89'));

Array
(
    [network] => Array
        (
            [0] => 81.32.0.0
            [1] => 81.48.0.0
        )
    [data] => Array
        (
            [country] => Array
                (
                    [code] => es
                    [name] => Spain
                )
        )
)

Получить все элементы справочника

print_r($iptool->getRegister('country'));

Array
(
    [1] => Array
        (
            [code] => cn
            [name] => China
        )
    [2] => Array
        (
            [code] => es
            [name] => Spain
        )
...
    [N] => Array
        (
            [code] => jp
            [name] => Japan
        )
)

Получение элемента справочника по его порядковому номеру

print_r($iptool->getRegister('country',2));

Array
    (
        [code] => cn
        [name] => China
    )
)

Процесс создания БД более трудоёмкий, но он описан с документации, которая доступна в репозитории и в wiki GitHub'а на русском и ломаном английском.

Автор: Ivan Dudarev

Источник [4]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/ip/265305

Ссылки в тексте:

[1] zapimir: https://habrahabr.ru/users/zapimir/

[2] разработкой: https://github.com/ddrv/iptool

[3] Composer: https://getcomposer.org

[4] Источник: https://habrahabr.ru/post/339748/?utm_source=habrahabr&utm_medium=rss&utm_campaign=sandbox