Следующим шагом неплохо было бы определить страну клиента. Конечно, это можно сделать по домену первого уровня, взятого из имени хоста, но, во-первых, физическое расположение хоста не всегда соответствует стране, которой приписан домен (например, хост зоны .com может находиться и в России), к тому же есть такие интернациональные домены как .org, .net, .edu и т.д.
Проблему можно разрешить, получив статистику о распределении адресного пространства от одной из организаций, ответственной за это (APNIC (
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". Вывод на экран можно продублировать выводом в отдельный файл для последующего анализа.