什么是PHP的geoip_isp_by_name函数的等价物?

时间:2013-04-18 19:21:31

标签: python django geoip

我需要相当于geoip_isp_by_name。我正在使用Django GeoIP模块。

我经常搜索,但找不到这个功能。请指教。

1 个答案:

答案 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 databasesOrg edition可以在这里找到,但似乎要花钱。我不确定Python中是否有免费的替代品,或者是否有人共享他们的API。如果没有,我的hacky解决方案可能就是这样。