快速查詢IP資訊,支援國内和國外IP資訊查詢,支援查詢經緯度,地理位置最高支援到城市。
1. IPTools.China
快速查詢中國IP位址資訊,包含國家、省份、城市、和網絡營運商。非中國IP隻支援查詢國家。
(1) 安裝
Install-Package IPTools.China
(2) 下載下傳資料庫檔案
https://github.com/stulzq/IPTools/raw/master/db/ip2region.db
将資料庫檔案下載下傳完成以後,放到你的項目根目錄(與*.csprj檔案同級),并設定複制到輸出目錄

1.2.0版本開始就取消了将資料庫檔案嵌入到程式集,友善更新,且減少程式集大小。
(3) 使用
IpTool.Search("你的ip位址");
示例.
var ipinfo = IpTool.Search("171.210.12.163");
Console.WriteLine(ipinfo.Country); // 中國
Console.WriteLine(ipinfo.Province); // 四川省
Console.WriteLine(ipinfo.City); // 成都市
Console.WriteLine(ipinfo.NetworkOperator);// 電信
(4) 國際化
不支援國際化,是以不能使用
IpTool.SearchWithI18NAsync()
。
(5) 性能測試
單線程,雙重for循環,查詢65025個IP,花費170毫秒。
2. IPTools.International
快速查詢全球IP資訊,支援多語言,地理資訊包括國家、省份、城市、郵政編碼、緯度和精度。
Install-Package IPTools.International
https://github.com/stulzq/IPTools/raw/master/db/GeoLite2-City.mmdb
IpTool.Search("你的ip位址");
var ipinfo = IpTool.SearchWithI18N("171.210.12.163");
Console.WriteLine(ipinfo.Country); // 中國
Console.WriteLine(ipinfo.CountryCode); // CN
Console.WriteLine(ipinfo.Province); // 四川省
Console.WriteLine(ipinfo.ProvinceCode); // SC
Console.WriteLine(ipinfo.City); // 成都
Console.WriteLine(ipinfo.Latitude); // 30.6667
Console.WriteLine(ipinfo.Longitude); // 104.6667
Console.WriteLine(ipinfo.AccuracyRadius);// 50
IpTool.SearchWithI18N("你的ip位址");
var ipinfo = IpTool.SearchWithI18N("171.210.12.163","en");//如果不設定 language code, 預設将會使用中文
Console.WriteLine(ipinfo.Country); // China
Console.WriteLine(ipinfo.CountryCode); // CN
Console.WriteLine(ipinfo.Province); // Sichuan
Console.WriteLine(ipinfo.ProvinceCode); // SC
Console.WriteLine(ipinfo.City); // Chengdu
Console.WriteLine(ipinfo.Latitude); // 30.6667
Console.WriteLine(ipinfo.Longitude); // 104.6667
Console.WriteLine(ipinfo.AccuracyRadius);// 50
預設語言為中文,如何改變?使用下面的代碼進行設定。中文為
zh-CN
,英文為
en
IpToolSettings.DefaultLanguage = "en";
(5) 提升查詢速度
通過以下設定,将會提升一倍的查詢速度,其原理是将資料庫檔案完全加載到記憶體,付出的代價是記憶體将會增加60-70M,以空間換時間,這點需要注意。
IpToolSettings.LoadInternationalDbToMemory = true;
版本要求 >= 1.2.0
(6) 性能測試
單線程,雙重for循環,查詢65025個IP,花費1500毫秒(Memory)。
3. ASP.NET Core 支援
IPTools 提供了
HttpContext
對象的擴充方法。
使用:
HttpContext.GetRemoteIpInfo();
HttpContext.GetRemoteIpInfo(headerKey); // 從請求頭擷取ip位址資訊,如果你使用了nginx、haproxy等代理
4. 同時使用 IPTools.China 和 IPTools.International
IPTools.China 和 IPTools.International 都實作了
IIpSearcher
,
IpTool
類在加載時會檢測你所安裝的程式包進行初始化,且僅僅初始化一次。
IpTool
具有三個靜态隻讀屬性,分别是
DefaultSearcher
、
IpChinaSearcher
IpAllSearcher
-
DefaultSearcher
和IpTool.Search()
将會使用的預設Ip搜尋器。IpTool.SearchWithI18N()
-
。對應 IPTools.China 實作的搜尋器。IpChinaSearcher
-
。對應 IPTools.International 實作的搜尋器。IpAllSearcher
如果你隻是安裝了 IPTools.China 那麼,
DefaultSearcher
将會是
IpChinaSearcher
IpAllSearcher
将會為 null。
如果你隻是安裝了 IPTools.International 那麼,
DefaultSearcher
IpAllSearcher
IpChinaSearcher
如果你同時安裝了以上兩個元件,那麼預設情況下
DefaultSearcher
IpChinaSearcher
IpChinaSearcher
IpAllSearcher
都不會為null。
改變
DefaultSearcher
所使用的預設 Searcher 請使用下面的代碼,如果你同時安裝了兩個元件才會生效。
IpToolSettings.DefalutSearcherType = IpSearcherType.China;
IpToolSettings.DefalutSearcherType = IpSearcherType.International;