Мне нужен эквивалент geoip_isp_by_name. Я использую модуль Django GeoIP.Что эквивалентно функции geoip_isp_by_name PHP?
Я ищу много, и я не мог найти функцию. Пожалуйста, порекомендуйте.
Мне нужен эквивалент geoip_isp_by_name. Я использую модуль Django GeoIP.Что эквивалентно функции geoip_isp_by_name PHP?
Я ищу много, и я не мог найти функцию. Пожалуйста, порекомендуйте.
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. Если нет, то это может быть мое взломанное решение.
Спасибо, но я получил ту же ошибку в OS X. –
Я сделал новую [проблему] (https://github.com/appliedsec/pygeoip/issues/34) на своем [Github repo] (https: // github.com/appliedsec/pygeoip). Я буду обновлять свой ответ, если/когда я получу ответ. – timss
@AdamSilver Я добавил хакерское альтернативное решение. Взгляните и посмотрите, хорошо ли это для вашего случая использования. – timss