我需要相当于geoip_isp_by_name。我正在使用Django GeoIP模块。
我经常搜索,但找不到这个功能。请指教。
答案 0 :(得分:3)
pygeoip支持使用GeoIP数据库进行ISP查找。
# 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
更新:由于GeoIP不起作用(请参阅评论),我在使用这些跟踪网站时玩了一下。有一个适用于IP和主机名的hacky解决方案。应该不应该用作永久解决方案,但它可以正常工作。
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
更新2 :我的问题得到answer。有seperate GeoIP databases,Org edition可以在这里找到,但似乎要花钱。我不确定Python中是否有免费的替代品,或者是否有人共享他们的API。如果没有,我的hacky解决方案可能就是这样。