SQL формат. Конвертация IP адреса в IP номер
Таблица worldip содержит поля start, end и code.
В одной строке записан один диапазон сети. start и end - это поля типа integer с IP номерами, code содержит двухбуквенный код страны, например "RU".
Конвертация IP адреса в IP номер происходит по следуюшей формуле:
Например, IP адрес 91.121.147.207 конвертируется в IP номер 1534694351
Вы можете получить код страны из базы, например, таким запросом:
Если вы используете API (чтобы получать более актуальные данные), вы можете поставить таблицу с названиями стран.
Спасибо mgyk за подсказку использовать внутренние функции MySQL для преобразования адресов.
Во всех вышеперечисленных примерах можно заменить IP_NUMBER на inet_aton('IP_ADDR')
Конвертация IP адреса в IP номер происходит по следуюшей формуле:
IP Number = 16777216*A + 65536*B + 256*C + D
где IP Address = A.B.C.D
В PHP есть готовая функция, которая возвращает IP номер - ip2long($ip_address). Например, IP адрес 91.121.147.207 конвертируется в IP номер 1534694351
Вы можете получить код страны из базы, например, таким запросом:
SELECT code FROM worldip WHERE start<=IP_NUMBER and end>=IP_NUMBER
Если вы инсталлируете вторую таблицу с названиями стран, то так можно получить и код и страну одним запросом:
SELECT wl.code,wl.country FROM worldip w LEFT JOIN worldip_land wl
ON (w.code=wl.code) WHERE (w.start<=IP_NUMBER and w.end>=IP_NUMBER)
или только название страны:
SELECT wl.country FROM worldip_land wl LEFT JOIN worldip w
ON (w.code=wl.code) WHERE (w.start<=IP_NUMBER and w.end>=IP_NUMBER)
Если вы используете API (чтобы получать более актуальные данные), вы можете поставить таблицу с названиями стран.
SELECT country FROM worldip_land WHERE code="GB"вернет "United Kingdom" или "Великобритания" для русского варианта таблицыСпасибо mgyk за подсказку использовать внутренние функции MySQL для преобразования адресов.
Во всех вышеперечисленных примерах можно заменить IP_NUMBER на inet_aton('IP_ADDR')
SELECT code FROM worldip WHERE
(start<=inet_aton('77.77.77.77') and end>=inet_aton('77.77.77.77'))
select inet_ntoa(168496141) -> 10.11.12.13
Обратное преобразование select inet_aton('10.11.12.13') -> 168496141;
Можете привести и исходники. Извиняюсь я не программист, но понять код могу :)
Спасибо!
И тогда пустой ответ из базы означает все что угодно кроме Франции.
Второй вариант, установить всю базу. А запрос для всех диапазонов(в формате IP адреса) одной страны такой:
Результат выглядит так (только часть его):
кстати, это оператор теле2, почему-то везде он показывается как Швеция, хотя люди из России ходят под таким ип :)