我需要等效的geoip_isp_by_name。我正在使用Django GeoIP模块。
我搜索了很多,但我找不到该功能。请指教。
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 国家数据库安装说明
可悲的是,我无法让它工作,我的 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:得到了我的问题的答案。有单独的 GeoIP 数据库,可以在这里找到Org 版本,但似乎要花钱。我不确定 Python 中是否有免费的替代品,或者有人共享他们的 API。如果没有,我的 hacky 解决方案可能就是它。