如何通过 IP 地址找到城市/州或国家等位置?
是否有 Ruby gem 或 Python 模块可以执行此操作?或者,是否有具有 API 的网站?
答案1
您可以使用http://ipinfo.io用于此的 API:
$ curl ipinfo.io/8.8.8.8
{
"ip": "8.8.8.8",
"hostname": "google-public-dns-a.google.com",
"city": "Mountain View",
"region": "California",
"country": "US",
"loc": "37.3860,-122.0838",
"org": "AS15169 Google Inc.",
"postal": "94040"
}
如果您只对一个字段感兴趣,您可以将其添加到 URL 中以纯文本形式获取:
$ curl ipinfo.io/8.8.8.8/loc
37.3860,-122.0838
$ curl ipinfo.io/8.8.8.8/country
US
如果你正在寻找一个python模块https://github.com/juanpabloaj/pyipinfo是一个简单的包装器,或者http://geocoder.readthedocs.org/en/stable/功能更加齐全,并内置了对 ipinfo.io 和其他提供商的支持。
答案2
是的,您可以使用 IP 地理位置 API 查找 IP 地址所在的城市、州或国家/地区。我知道有几个网站向公司或像你我一样好奇的个人提供此类服务。
但是,市面上的任何软件都有不同的功能,因此您需要仔细检查它们,然后再决定哪种软件适合您的要求。关于您提到的编程语言,通常最佳 IP 地理位置 API支持多种编程语言,包括 Ruby 和 Python。
您还指定了城市、州或国家/地区等详细信息。好吧,无论您选择哪种 API,这些地理数据点肯定会在您进行查询时位于输出结果的最顶部。但 IP 地理位置 API 通常会提供更多详细信息,例如时区和邮政编码,如果您希望更清楚地了解您正在地理定位的 IP 地址,这些详细信息很重要。
以下是我个人使用的 API。
https://geoipify.whoisxmlapi.com/
此 API 可帮助查找 IP 地址的地理位置(在这里检查示例输出) 来自 250 个国家的 950 多万个 IP 地址块。我认为,这个数字应该足以涵盖目前使用的几乎所有已知 IP 地址。
该提供商还拥有一个地理位置数据库,其中包含 IPv4 和 IPv6 地址,全球 120,000 多个城镇的 340,000 多个位置。我喜欢的是它每周更新一次,并且可以 CSV 或 JSON 格式下载。
在发出请求之前,您需要一个个人 API 密钥,您可以从网站的“我的产品”页面获取该密钥。要进行位置搜索,您可以选择输入目标的 IPv4 或 IPv6 地址、域名或电子邮件地址。
搜索结果将包含您的目标的国家、地区、城市、纬度、经度、邮政编码、时区、ISP、域数组、自治系统编号、系统名称、API 系统路由和自治系统网站的 URL。
它们以默认的 JSON 格式显示,但您可以选择 JSON 或 XML。系统兼容性应该不是问题,因为输出支持 9 种编程语言,包括 Ruby 和 Python。
如果您需要发出多个地理位置请求,还有一个在线批量 IP 地理位置查找服务,据称允许您一次检查多达 100,000 个 IP 地址。
https:// https://geo.ipify.org/
我使用的第二家提供商声称可以提供来自 250 个国家/地区的 800 多万个 IP 块的实时地理定位。
他们还拥有一个 IP 地理位置数据库,其中包含几乎所有现有 IP 地址的近 500 万条累积记录(在这里检查示例输出)。他们每月都会更新它,并且可以以相对较小的 40 Mb 压缩文件大小下载。
发出搜索请求需要个人 API 密钥,您可以从此提供商的订阅页面获取该密钥。要进行位置搜索,您需要输入目标的 IPv4 地址。
查询结果显示目标的精确位置详细信息,包括国家、地区、城市、纬度、经度、邮政编码和时区。输出可以以 XML 或 JSON 格式显示。
该 API 还支持 9 种编程语言——即 Javascript、C#、Java、PHP、NodeJS、Perl、PowerShell 以及 Python 和 Ruby。
如果您使用 IP 地理位置 API,则可以轻松找到 IP 地址所在的城市、州或国家/地区。但是,请记住,您的选择必须能够提供足够的覆盖范围和编程语言兼容性,才能为您提供所需的内容。Geoipify.whoisxmlapi.com 和 Geo.Ipfy 在这方面绝对可以提供帮助。
答案3
您可以去这里...任何此类服务都只是对任何 IP 地址的粗略估计,但这正是您正在寻找的。
http://www.geobytes.com/iplocator.htm(只需输入“要定位的 IP 地址”并点击提交)
答案4
Hostip网站是一个开源项目,其目标是构建/维护一个将 IP 地址映射到城市的数据库。他们的关于页面解释了填充此数据库所依赖的数据源。
使用 HostIP,有两种方法可以从 IP 地址获取位置数据:
他们还有一个设计精良、易于使用的 RESTFUL API:只需在 i 后面传入你的 ip 地址即可p=在 GET 请求字符串中):
import urllib
response = urllib.urlopen('http://api.hostip.info/get_html.php?ip=12.215.42.19&position=true').read()
print(response)
其次,项目网站也完整数据库可供下载。