2013-04-18 4 views

ответ

3

pygeoip имеет поддержку поиска ISP с использованием базы данных GeoIP.

# Normally found under /usr/share/GeoIP/{GeoIP,GeoIPv6}.dat 
gi = pygeoip.GeoIP('/path/to/GeoIPISP.dat') 
gi.org_by_name('cnn.com') 
'Turner Broadcasting System' 

Процесс установки базы данных GeoIP зависит от вашей операционной системы и дистрибутива. Он обычно доступен в вашем любимом хранилище дистрибутива под номером geoip-database. Для получения дополнительной информации см. GeoIP Country Database Installation Instructions

К сожалению, я не мог заставить его работать, я получил ошибку на обеих установках Ubuntu 12.10 и Debian 6, но я не уверен, что моя база данных GeoIP повреждена или модуль сломан. Возможно, вам повезет больше.

gi.org_by_name("cnn.com") 
Traceback (most recent call last): 
    File "<input>", line 1, in <module> 
    File "/usr/local/lib/python2.7/dist-packages/pygeoip/__init__.py", line 548, in org_by_name 
    return self.org_by_addr(addr) 
    File "/usr/local/lib/python2.7/dist-packages/pygeoip/__init__.py", line 531, in org_by_addr 
    raise GeoIPError(message) 
GeoIPError: Invalid database type, expected Org, ISP or ASNum 

Update: Так как GeoIP не будет работать (см комментарии), я играл немного с использованием этих индикаторных сайтов. Получено хакерское решение, которое работает как для IP-адресов, так и для имен хостов. Возможно, это не должно использоваться как постоянное решение, но оно работает нормально.

import html2text 
import re 
import urllib2 

lookup = "thevoid.no" # accepts both hostname and ip 

tracer = "http://www.ip-adress.com/ip_tracer/" 
pat = "ISP of this IP \[\?\]:\n\n([a-zA-Z ]+)" 
hdr = {'User-Agent': 'Mozilla/5.0'} # ip-adress.com doesn't accept Python 
req = urllib2.Request(tracer + lookup, headers=hdr) 
page = urllib2.urlopen(req).read() 

h = html2text.HTML2Text() 
h.ignore_links = True 
text = h.handle(page) 

try: 
    # Hetzner Online AG 
    print re.search(pat, text).group(1) 
except: 
    print "Could not find ISP for", lookup 

Update 2: Получил answer к моему вопросу. Там seperate GeoIP databases, а Org edition можно найти здесь, но, похоже, стоит денег. Я не уверен, есть ли в Python бесплатная альтернатива, или кто-то делится своим API. Если нет, то это может быть мое взломанное решение.

+0

Спасибо, но я получил ту же ошибку в OS X. –

+0

Я сделал новую [проблему] (https://github.com/appliedsec/pygeoip/issues/34) на своем [Github repo] (https: // github.com/appliedsec/pygeoip). Я буду обновлять свой ответ, если/когда я получу ответ. – timss

+0

@AdamSilver Я добавил хакерское альтернативное решение. Взгляните и посмотрите, хорошо ли это для вашего случая использования. – timss

Смежные вопросы