WebClub - Всероссийский Клуб Веб-разработчиков
WebClub.RU » Советы » Определение страны по ip адресу

Определение страны по ip адресу


Дата публикации: 16-04-2008

Следующим шагом неплохо было бы определить страну клиента. Конечно, это можно сделать по домену первого уровня, взятого из имени хоста, но, во-первых, физическое расположение хоста не всегда соответствует стране, которой приписан домен (например, хост зоны .com может находиться и в России), к тому же есть такие интернациональные домены как .org, .net, .edu и т.д.

Проблему можно разрешить, получив статистику о распределении адресного пространства от одной из организаций, ответственной за это (APNIC (http://www.apnic.net/), RIPE NCC(http://www.ripe.net/), ARIN (http://www.arin.net/)). Эти организации с определенной периодичностью размещают такую статистику на своих FTP серверах. Для получения этой информации и формирования базы распределения ip адресов по странам, было решено воспользовался кодом, описанным в статье Д.Откидача "Определение страны по IP адресу" (http://python.ru/2002-06/69.html). Приведенный в статье код распространяется под лицензией в стиле Python и состоит из определения двух классов IPRangeDB и его наследника CountryByIP, в котором определены методы заполнения базы. Для удобства я поместил описания этих классов в отдельный модуль country.py, в конце которого добавил пару строчек:


if __name__ == "__main__":
    db = CountryByIP('country.db', 'n')
    db.fetch()

Таким образом, класс IPRangeDB можно импортировать из основного модуля и использовать для определения страны по ip адресу, а если запустить country.py, будет обновляться база соответствия ip адресов странам. Хороший вариант - периодически автоматически запускать скрипт (через cron в Linux или Task Sheduler в Windows).

В основном скрипте для определения страны пишем следующий код:


db = IPRangeDB('country.db')
undefined_country = {}

if not undefined_country.has_key(ip):
    try:
        country = db[ip]
    except KeyError:
        print 'Не удалось определить страну для: %s' % ip
        undefined_country[ip] = '00'
        country = '00'
else:
    country = '00'

Ip адреса, для которых не удалось определить страну, выводятся на экран и добавляются в словарь undefined_country. При этом стране присваивается код "00". Вывод на экран можно продублировать выводом в отдельный файл для последующего анализа.

Популярное

Не так давно в сети появился новый сервис, под названием Dead Man Zero. Этот сервис сделал...
Рынок социальных площадок уже давно стал стабильным. Несмотря на то, что время от времени...
Artisteer 4 – единственный в своем роде продукт, позволяющий автоматизировать работу над созданием...
Октябрь 2018 (14)
Февраль 2017 (3)
Январь 2017 (1)
Август 2016 (1)
Май 2016 (2)
Ноябрь 2015 (1)

Карта сайта: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41

Друзья сайта



Случайная цитата

E. W. Dijkstra:

"Использование COBOL калечит разум; исходя из этого, обучение этому языку должно быть признано уголовно наказуемым преступлением."

Опрос

Ваша ОС?

Windows XP
Windows 7
др. версия Windows
Linux
др. ОС