.NET Core 開源工具 IPTools - 快速查詢 IP 地理位置、經緯度信息


快速查詢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信息,支持多語言,地理信息包括國家、省份、城市、郵政編碼、緯度和精度。

(1) 安裝

Install-Package IPTools.International

(2) 下載數據庫文件

https://github.com/stulzq/IPTools/raw/master/db/GeoLite2-City.mmdb

將數據庫文件下載完成以后,放到你的項目根目錄(與*.csprj文件同級),並設置復制到輸出目錄

1.2.0版本開始就取消了將數據庫文件嵌入到程序集,方便更新,且減少程序集大小。

(3) 使用

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

(4) 國際化

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 都實現了 IIpSearcherIpTool類在加載時會檢測你所安裝的程序包進行初始化,且僅僅初始化一次。IpTool具有三個靜態只讀屬性,分別是 DefaultSearcherIpChinaSearcherIpAllSearcher

  • DefaultSearcherIpTool.Search()IpTool.SearchWithI18N() 將會使用的默認Ip搜索器。
  • IpChinaSearcher。對應 IPTools.China 實現的搜索器。
  • IpAllSearcher。對應 IPTools.International 實現的搜索器。

如果你只是安裝了 IPTools.China 那么,DefaultSearcher 將會是 IpChinaSearcherIpAllSearcher將會為 null。

如果你只是安裝了 IPTools.International 那么,DefaultSearcher 將會是 IpAllSearcherIpChinaSearcher將會為 null。

如果你同時安裝了以上兩個組件,那么默認情況下 DefaultSearcher 將會是 IpChinaSearcherIpChinaSearcherIpAllSearcher 都不會為null。

改變DefaultSearcher 所使用的默認 Searcher 請使用下面的代碼,如果你同時安裝了兩個組件才會生效。

IpToolSettings.DefalutSearcherType = IpSearcherType.China;
IpToolSettings.DefalutSearcherType = IpSearcherType.International;

5. 開源地址

https://github.com/stulzq/IPTools


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM