快速查詢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;
