2015-08-21 4 views
0

Я получаю неправильное местоположение, когда я запрашиваю базу данных GeoLite2-City.mmdb с ip = '104.6.30.56' (из Python). Их демонстрационный сайт возвращает хорошие данные для этого IP (https://www.maxmind.com/en/geoip-demo).MaxMind GeoLite2 возвращает неправильное местоположение

In [33]: import geoip2.database 

In [34]: reader = geoip2.database.Reader('.../GeoLite2-City.mmdb') 

In [35]: reader.city('104.6.30.56').city # should be Santa Rosa, Ca 
Out[35]: geoip2.records.City(geoname_id=None, confidence=None, _locales=['en'], names={}) 

In [36]: reader.city('104.6.30.56').location # should be ~(38, -122) 
Out[36]: geoip2.records.Location(postal_confidence=None, average_income=None, accuracy_radius=None, time_zone=None, longitude=-97.0, metro_code=None, population_density=None, postal_code=None, latitude=38.0) 

In [37]: reader.city('173.194.116.131').city # works fine for Google 
Out[37]: geoip2.records.City(geoname_id=5375480, confidence=None, _locales=['en'], names={u'ru': u'\u041c\u0430\u0443\u043d\u0442\u0438\u043d-\u0412\u044c\u044e', u'fr': u'Mountain View', u'en': u'Mountain View', u'de': u'Mountain View', u'zh-CN': u'\u8292\u5ef7\u7ef4\u5c24', u'ja': u'\u30de\u30a6\u30f3\u30c6\u30f3\u30d3\u30e5\u30fc'}) 

Версии:

In [39]: reader.metadata() 
Out[39]: maxminddb.reader.Metadata(binary_format_major_version=2, description={u'en': u'GeoLite2 City database'}, record_size=28, database_type=u'GeoLite2-City', languages=[u'de', u'en', u'es', u'fr', u'ja', u'pt-BR', u'ru', u'zh-CN'], build_epoch=1438796457, ip_version=6, node_count=3199926, binary_format_minor_version=0) 

In [40]: geoip2.__version__ 
Out[40]: '2.2.0' 

Это потому, что я использую версию Lite?

+1

Это может быть связано с коммерческими и Lite. Вы можете рассмотреть другую базу данных. Например, IP2Location LITE в http://lite.ip2location.com показывает Санта-Розу для 104.6.30.56, как и ожидалось. –

ответ

0

Географическое положение только несколько точным.

Провайдеры, такие как MaxMind, делают все возможное, чтобы понять, какой IP-адрес связан с географическим местоположением. Однако это сложная задача. IP-адреса могут быть переназначены компанией, которая их контролирует, некоторые компании не публикуют географию, связанную с адресом, IP-адрес, который вы наблюдаете, может принадлежать proxy server, далекому от фактического пользователя, и могут быть ошибки компиляции данных.

Поскольку их онлайн-система возвращает правильное географическое местоположение, это, вероятно, пример этой конечной категории.

Работая с географическим местоположением и сопоставляя его с известными сведениями о пользователях, я отмечаю, что базы данных геоданных точны примерно в 85% - 90% случаев. Некоторые провайдеры делают больше, чем другие, чтобы правильно обрабатывать более сложные IP-адреса, но ни один из них не идеален.

0

Если GeoIP вернет правильный результат, а GeoLite - нет, тогда да, вероятно, вы увидите влияние ухудшенной точности GeoLite. Это действительно вопрос: «Хочешь заплатить, и если да, то сколько?»

Имейте в виду, что они недавно представили a third-level "Precision" service offering, из которых сама база данных города теперь является деградированной версией.