天天看點

.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檔案同級),并設定複制到輸出目錄

.NET Core 開源工具 IPTools - 快速查詢 IP 地理位置、經緯度資訊
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           
.NET Core 開源工具 IPTools - 快速查詢 IP 地理位置、經緯度資訊

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()

    IpTool.SearchWithI18N()

    将會使用的預設Ip搜尋器。
  • IpChinaSearcher

    。對應 IPTools.China 實作的搜尋器。
  • IpAllSearcher

    。對應 IPTools.International 實作的搜尋器。

如果你隻是安裝了 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;           

5. 開源位址

https://github.com/stulzq/IPTools

繼續閱讀