57

我找到了几个node.js 模块,用于使用 IP 地址查找有关客户端位置和网络的信息。

要求:

  1. 位置 - 国家、城市、州、纬度、经度等。

  2. 网络 - 互联网服务提供商、互联网连接类型和互联网速度等。

  3. 数据准确性 - 最大可能性。

注意:寻找服务器端解决方案。

上述模块使用maxmind 数据。我也读过关于maxmind 数据准确性的信息。

我对选择上述 node.js 模块有点困惑,我想知道是否有更好的 node.js 框架可用于查找满足我要求的信息或任何其他可以移植到 node.js 的语言插件。

任何想法都会很棒。

4

3 回答 3

51

使用基于 IP 的地理定位是可能的,但不是很准确。因此,我建议您考虑采用混合方法,例如尝试通过浏览器内的 HTML5 地理定位 API 获取用户位置,并在必要时回退到服务器端。

我查看了可用于 node.js 的两个最常用的 geoip/-location 模块,它们都使用 MaxMind 提供的数据集。AFAIK 您必须手动使这些数据库保持最新状态,这显然令人沮丧。所以你可以考虑写一个同步服务/脚本,每月更新一次数据库。(可以在此处找到有关 MaxMinds 免费解决方案的更多信息)。

kuno/GeoIP是一个 GeoIP 绑定,所以它的核心是使用 libGeoIP C 库,这没问题,但可能不像纯 JavaScript 实现bluesmoon/node-geoip提供的那样可移植。两者都可以,取决于您更喜欢哪个库。在性能方面,你必须做一些基准测试(如果这个主题对你很重要)......这个问题没有一般的答案,哪种类型的模块(C-binding/native)会更快。

如果你愿意花几块钱,你也可以看看MaxMinds Web Service,这是一个简单的 REST API,将是最精确的方法。文档非常好——所以开始使用它不会有问题。

于 2013-05-23T13:32:53.827 回答
29

如果你得到了IP,你可以随时调用外部服务来获取位置信息,例如freegeoip.net,并使用请求模块。

(ip, location) ->
  url = 'http://freegeoip.net/json/' + ip
  request.get url, (error, response, body) ->
    if !error && response.statusCode == 200
      data = JSON.parse body
      location data

对于网络信息,我没有解决方案,但我也在寻找一个。

于 2013-05-29T17:46:24.090 回答
11

您可以在http://ipinfo.io API上从我的 API 获取您想要的所有信息:

$ curl ipinfo.io
{
  "ip": "67.188.232.131",
  "hostname": "c-67-188-232-131.hsd1.ca.comcast.net",
  "city": "Mountain View",
  "region": "California",
  "country": "US",
  "loc": "37.4192,-122.0574",
  "org": "AS7922 Comcast Cable Communications, Inc.",
  "postal": "94043"
}

它支持 JSONP 和 CORS,因此您可以在服务器端或客户端使用它。更多详细信息,请访问http://ipinfo.io/developers

于 2014-07-05T16:44:29.147 回答