快速查詢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 都實現了 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
將會為 null。
如果你同時安裝了以上兩個組件,那么默認情況下 DefaultSearcher
將會是 IpChinaSearcher
,IpChinaSearcher
和 IpAllSearcher
都不會為null。
改變DefaultSearcher
所使用的默認 Searcher 請使用下面的代碼,如果你同時安裝了兩個組件才會生效。
IpToolSettings.DefalutSearcherType = IpSearcherType.China;
IpToolSettings.DefalutSearcherType = IpSearcherType.International;