lib-qqwry高效查詢純真IP庫
lib-qqwry是一個高效查詢純真 IP 庫(qqwry.dat)的模塊。它是用 NodeJS 解析純真 IP 庫(QQwry.dat) ,支持 IP 段查詢。為更好的字符轉(zhuǎn)化效率,未使用iconv模塊,直接使用gbk編碼表文件。經(jīng)過不斷優(yōu)化,相同環(huán)境下,單次查詢速度從最初的0.6毫秒提升到現(xiàn)在的0.004毫秒。
實現(xiàn)的功能
1.通過IP地址或有效的IP數(shù)值,搜索IP地址對應(yīng)的地理位置信息。
2.搜索一個IP段的地理位置信息。
3.IP地址與數(shù)值的互轉(zhuǎn)。
npm安裝
npm install lib-qqwry
調(diào)用方法
var qqwry = require('lib-qqwry').info(); //調(diào)用并初始化,普通機(jī)器初始需要70毫秒左右;
var ipL = qqwry.searchIP("202.103.102.10"); //查詢IP信息
var ipLA = qqwry.searchIPScope("0.0.0.0","1.0.0.0"); //查詢IP段信息
API
標(biāo)明的"靜態(tài)方法"可以值接使用,無需初始化.
初使化操作會將GBK編碼表,IP庫加載到內(nèi)存中,以提高后續(xù)的查詢效率,大概占用12M左右的內(nèi)存.
info(dataPath) IP庫初始化
dataPath : IP庫路徑,可選; //默認(rèn)路徑為data文件夾中(__dirname + "/data/qqwry.dat");
callback : 回調(diào)函數(shù) //可在此時調(diào)用查詢函數(shù)
infoAsync(dataPath,callback) IP庫初始化的異步方法
info()的異步方法; 初始化需要70毫秒,以及占用9MB左右的內(nèi)存,項目資源緊張可以異步初始化。
//你可以這樣
qqwry.info();
var ipL = qqwry.searchIP("202.103.102.10");
//也可以這樣初始化,推薦;
qqwry.infoAsync(function(){
var ipL = qqwry.searchIP("202.103.102.10");
});
unInfo() 釋放初始化后占用的資源
info()的逆方法
searchIP(IP) 單個IP查詢
IP : IP地址/IP數(shù)值 反回一個JSON對像;
> qqwry.searchIP("255.255.255.255");
{ ip: '255.255.255.255',
Country: '純真網(wǎng)絡(luò)',
Area: '2013年6月10日IP數(shù)據(jù)' }
searchIPScope(beginIP,endIP) IP段查詢
beginIP : 啟始IP
endIP : 結(jié)束IP
反回一個JSON對像數(shù)組;
> qqwry.searchIPScope("0.0.0.0","1.0.0.0");
[ { begIP: '0.0.0.0',
endIP: '0.255.255.255',
Country: 'IANA保留地址',
Area: ' CZ88.NET' },
{ begIP: '1.0.0.0',
endIP: '1.0.0.255',
Country: '澳大利亞',
Area: ' CZ88.NET' } ]
searchIPScopeAsync(beginIP,endIP,callback) IP段查詢的異步方法
searchIPScope() 的異步方法,查詢結(jié)果會以第一個參數(shù)的形式傳給回調(diào)函數(shù);
DBUG(Bool) 調(diào)試模式開關(guān),默認(rèn)未啟用
DUBG模式會在控制臺輸出查詢的關(guān)鍵信息,方便定位錯誤;
var qqwry = require('lib-qqwry').DBUG().info(); //開啟調(diào)試模式并初始化
qqrry.DBUG(false); //關(guān)閉調(diào)試模式;
ipToInt(IP) IP地址轉(zhuǎn)數(shù)值(靜態(tài)方法)
> qqwry.ipToInt("255.255.255.255")
4294967295
intToIP(INT) 數(shù)值轉(zhuǎn)IP地址(靜態(tài)方法)
> qqwry.intToIP(4294967295) '255.255.255.255'
ipEndianChange(INT) 字節(jié)序轉(zhuǎn)換(靜態(tài)方法)
按32位轉(zhuǎn)換參數(shù)的字節(jié)序
一些云平臺的環(huán)境變量中IP信息可能是Little-Endian形式的數(shù)值;
比如百度node.js環(huán)境中的 process.env.BAE_ENV_COOKIE_IP , 這時候就有用了;
> qqwry.ipEndianChange(0x010000FF) 4278190081 //0xFF000001
文檔說明
./data/qqwry.dat 默認(rèn)IP庫,可用最新IP庫替換; 下載地址www.cz88.net
./lib/qqwry.js 解析IP庫的主文件;
./lib/gbk.js GBK編碼表文件,從iconv-lite中找出來的,并增加了一個轉(zhuǎn)碼方法;
./test/test.js 使用演示;
./test/test_v.js 效率測試示例;
效率測試文件 test_v.js
node test_v.js 255.255.255.255 正常工作檢查node test_v.js -1 單個查詢效率測試node test_v.js -2 10次IP段查詢效率測試
