GeoIP 升数
一个来自MaxMind的GeoLite数据的原生NodeJS API.
本产品包括由MaxMind创建的GeoLite数据,可用自 http://maxmind.com/ 页面存档备份,存于互联网档案馆
页:1 您必须在安装后更新数据文件 。 MaxMind牌照不允许我们发行 使用此软件包的数据文件的最新版本。 遵循下面的指示 更新数据文件 详细情况.
导言
MaxMind为IP到Geo映射提供一组数据文件,同时提供开源库来解析并查找这些数据文件. 人们通常会在他们的CPI周围写一个包装符来获取其他语言(如JavaScript)的这些数据.
GeoIP-lite转而尝试成为一个完全本土的JavaScript库. 转换器脚本将 MaxMind 的 CSV 文件转换为 内部二进制格式(注意这与MaxMind提供的二进制数据格式不同)。 Geoip 模块使用这个 二进制文件以查找IP地址并返回它所映射的国家,区域和城市.
但是,由于GeoLite IPv6数据库目前不包含任何城市或区域,IPv4和IPv6地址都得到了支持 信息,城市,区域和邮政编码的查询仅支持IPv4.
哲学
我真正的目标是快速的JavaScript本土实施IP的地貌图. 我的主要动机是事实上 很难在不用MacPorts的库的情况下为Mac OSX 创建 libgeoip .
为什么是地理字
geoip-lite 是 MaxMind 地理IPI 的完全 JavaScript 执行。 其特征不如使用 libgeoip。 。 。 .
通过缩小范围,这个包在做检查时的速度大约为40%. IP到位置的搜索平均需要20微秒
a Macbook Pro. IPv4地址大约需要6微秒,而IPv6地址大约需要30微秒.
概要
var geoip = require('geoip-lite');
var ip = "207.97.227.239";
var geo = geoip.lookup(ip);
console.log(geo);
{ range: [ 3479298048, 3479300095 ],
country: 'US',
region: 'TX',
eu: '0',
timezone: 'America/Chicago',
city: 'San Antonio',
ll: [ 29.4969, -98.4032 ],
metro: 641,
area: 1000 }
安装
1. 获得图书馆
$ npm install geoip-lite
2. 更新数据文件(可选)
运行 cd node_modules/geoip-lite && npm run-script updatedb license_key=YOUR_LICENSE_KEY 以更新数据文件。 (替换) YOUR_LICENSE_KEY 用你的执照钥匙从 maxmind.com (英语)(中文(简体) )
您可以创建一个 maxmind 账户 这里
页:1 这需要大量的内存。 众所周知,它在数字海洋或AWS的微观实例上失败了.
没有改变这种情况的计划. geoip-lite 将所有数据存储在内存中,以便快速.
API 密码
geoip-lite完全同步. 没有召回。 所有屏蔽文件 IO 在启动时完成, 所以全部运行时间 电话在记忆中执行,而且速度快。 在读取内存和索引数据文件时,启动可能要花费多达200ms.
查找一个 IP 地址
如果您在多点四分号、 IPv6 结号、 或 32 位未签名整数中有一个 IP 地址( 已处理)
作为IPv4地址),传递给 lookup 方法。 请注意,您应当删除任何 [ 财务报告和审定财务报表 ] 围绕
IPv6地址在传递到这种方法之前.
var geo = geoip.lookup(ip);
如果找到 IP 地址,则 lookup 方法返回具有下列结构的对象:
{
range: [ <low bound of IP block>, <high bound of IP block> ],
country: 'XX', // 2 letter ISO-3166-1 country code
region: 'RR', // Up to 3 alphanumeric variable length characters as ISO 3166-2 code
// For US states this is the 2 letter state
// For the United Kingdom this could be ENG as a country like “England
// FIPS 10-4 subcountry code
eu: '0', // 1 if the country is a member state of the European Union, 0 otherwise.
timezone: 'Country/Zone', // Timezone from IANA Time Zone Database
city: "City Name", // This is the full city name
ll: [<latitude>, <longitude>], // The latitude and longitude of the city
metro: <metro code>, // Metro code
area: <accuracy_radius> // The approximate accuracy radius (km), around the latitude and longitude
}
实际数值 range 数组取决于IP是IPv4还是IPv6,并且应该是
被视为内部 geoip-lite。为了获得人类可读格式,将它们传递给 geoip.pretty()
如果找不到IP地址,则 lookup 返回时 null
相当漂亮的打印 IP 地址
如果您有一个32位未签名的整数, 或者一个数字作为其中的一部分返回 range 从 lookup 方法,
页:1 pretty 方法可以用来将它变成人可读的字符串.
console.log("The IP is %s", geoip.pretty(ip));
如果输入的格式是 geoip-lite 可以识别,否则它返回
输入本身.
内建更新器
这个软件包包含一个更新脚本,可以从MaxMind中取出文件并处理从CSV的转换. 已经设置了 npm 脚本别名来方便这一过程. 请记住这需要互联网和MaxMind 利率限制其服务器的下载量.
您至少需要从 maxmind.com (英语) 运行更新脚本.
包存储了MaxMind数据的校验和,默认情况下只有在校验和已经更改时才下载.
更新数据的方法
#update data if new data is available
npm run-script updatedb license_key=YOUR_LICENSE_KEY
#force udpate data even if checkums have not changed
npm run-script updatedb-force license_key=YOUR_LICENSE_KEY
您也可以通过下列方式运行:
node ./node_modules/geoip-lite/scripts/updatedb.js license_key=YOUR_LICENSE_KEY
更新完成后如何在应用程序中重新装入数据
如果您有服务器运行 geoip-lite,您想要在完成更新后重新装入其地理数据,而不重新启动.
程序
你可以在计划数据更新后按程序拨打
//Synchronously
geoip.reloadDataSync();
//Asynchronously
geoip.reloadData(function(){
console.log("Done");
});
自动启动并停止监视数据更新
您可以让数据监视器在数据目录中的文件更改时自动刷新相模中的地理数据 .
geoip.startWatchingDataUpdate();
此工具可用于 npm run-script updatedb 以定期更新运行中的服务器上的地理数据.
环境变量
以下环境变量可以设置.
# Override the default node_modules/geoip-lite/data dir
GEOTMPDIR=/some/path
# Override the default node_modules/geoip-lite/tmp dir
GEODATADIR=/some/path
洞穴
这个软件包包括来自MaxMind的GeoLite数据库. 这个数据库并不是现有最准确的数据库,
但是,这是免费的最好办法。 您可以使用来自 MaxMind 的商业 GeoIP 数据库
从 MaxMind 购买许可证,然后使用转换工具将其转换为格式
geoip -lite 明白了。 。 您需要使用 .csv 来自 MaxMind 的要转换的文件.
并请注意,在缩放时,图书馆可能需要长达5秒的时间来装入内存. 这主要取决于 当时你的磁盘多忙 它在轻装的磁盘上能承受到200m. 这是一次 但成本,你用非常快的外观来弥补它.
内存使用情况
对内存消耗的快速测试显示,库每个过程使用约100Mb
var geoip = require('geoip-lite');
console.log(process.memoryUsage());
/**
* Outputs:
* {
* rss: 126365696,
* heapTotal: 10305536,
* heapUsed: 5168944,
* external: 104347120
* }
**/
替代品
如果您在申请期间需要做不到100个查询, 或者您在启动时需要非常快的延迟, 您可能会想调查 快速胶片 一个具有兼容的API的软件包,该软件包对没有服务器的环境进行优化,提供更快的启动时间并降低内存消耗,而牺牲更长的浏览时间.
参考资料
版权
geoip-lite 是 Philip Tellis 版权 双唇@ bluesmoon. info 和其他贡献者,代码的最新版本是
可用时间 https://github.com/bluesmoon/node-geoip 页面存档备份,存于互联网档案馆
许可证
密码和数据有两个许可证。 见 自由主义 详细文件.