IPTools 是一个用于快速查询全球 IP 地址信息的库,支持国内和国际 IP 查询,提供详细的地理位置信息(如国家、省份、城市)以及经纬度等数据。

1. IPTools.China

IPTools.China 专注于快速查询中国 IP 地址信息,包括国家、省份、城市和网络运营商。对于非中国 IP,仅支持查询国家信息。

1.1 安装

Install-Package IPTools.China

1.2 下载数据库文件

从 GitHub 下载数据库文件,并将其放置在项目根目录(与 .csproj 文件同级),设置为“复制到输出目录”。

https://github.com/stulzq/IPTools/raw/master/db/ip2region.db

注意:1.2.0 版本开始取消了将数据库文件嵌入程序集,以方便更新并减少程序集大小。

1.3 使用

var ipinfo = IpTool.Search("171.210.12.163");
Console.WriteLine(ipinfo.Country); // 中国
Console.WriteLine(ipinfo.Province); // 四川省
Console.WriteLine(ipinfo.City); // 成都市
Console.WriteLine(ipinfo.NetworkOperator); // 电信

1.4 性能测试

单线程双重 for 循环查询 65,025 个 IP 地址,花费约 170 毫秒。

1.5 自定义 IP 数据库文件

IpToolSettings.ChinaDbPath = "path/to/your/ip2region.db";

2. IPTools.International

IPTools.International 支持全球 IP 地址查询,提供多语言支持,地理信息包括国家、省份、城市、邮政编码、纬度和经度。

2.1 安装

Install-Package IPTools.International

2.2 下载数据库文件

从 GitHub 下载数据库文件,并将其放置在项目根目录(与 .csproj 文件同级),设置为“复制到输出目录”。

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

注意:1.2.0 版本开始取消了将数据库文件嵌入程序集,以方便更新并减少程序集大小。

2.3 使用

var ipinfo = IpTool.SearchWithI18N("171.210.12.163");
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

2.4 国际化

默认语言为中文,可以通过以下代码设置其他语言(例如英文):

IpToolSettings.DefaultLanguage = "en";

示例:

var ipinfo = IpTool.SearchWithI18N("171.210.12.163", "en");
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

2.5 提升查询速度

通过将数据库文件加载到内存中,可以显著提升查询速度(大约提升一倍),但会增加 60-70MB 内存占用。

IpToolSettings.LoadInternationalDbToMemory = true;

版本要求:>= 1.2.0

2.6 性能测试

单线程双重 for 循环查询 65,025 个 IP 地址,花费约 1500 毫秒(内存模式)。

2.7 自定义 IP 数据库文件

IpToolSettings.InternationalDbPath = "path/to/your/GeoLite2-City.mmdb";

3. ASP.NET Core 支持

IPTools 提供了对 HttpContext 对象的扩展方法,便于在 ASP.NET Core 应用中获取远程 IP 信息。

var ipInfo = HttpContext.GetRemoteIpInfo();
// 或者从请求头获取 IP 地址信息(适用于 Nginx、HAProxy 等代理)
var ipInfoFromHeader = HttpContext.GetRemoteIpInfo("X-Forwarded-For");

4. 同时使用 IPTools.China 和 IPTools.International

IPTools.ChinaIPTools.International 都实现了 IIpSearcher 接口,IpTool 类在加载时会根据已安装的程序包进行初始化。

  • DefaultSearcher:默认使用的 IP 搜索器。
  • IpChinaSearcher:对应 IPTools.China 实现的搜索器。
  • IpAllSearcher:对应 IPTools.International 实现的搜索器。

如果你只安装了 IPTools.China,那么 DefaultSearcher 将是 IpChinaSearcherIpAllSearchernull

如果你只安装了 IPTools.International,那么 DefaultSearcher 将是 IpAllSearcherIpChinaSearchernull

如果你同时安装了两个组件,默认情况下 DefaultSearcher 将是 IpChinaSearcherIpChinaSearcherIpAllSearcher 都不会为 null

可以通过以下代码更改默认的搜索器:

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

欢迎关注我的公众号“Net分享”,技术文章第一时间推送,随缘更新 , 分享一些你可能注意不到的细节

IPTools for .NET:快速查询全球IP信息的更多相关文章

  1. [置顶] oracle 快速查询数据库各种信息、及转换对应java代码

    1 查询表中数据量 select 'select '||''''||t.TABLE_NAME||''''||' as table_name, count(*) from '|| t.TABLE_NAM ...

  2. .NET Core 开源工具 IPTools - 快速查询 IP 地理位置、经纬度信息

    快速查询IP信息,支持国内和国外IP信息查询,支持查询经纬度,地理位置最高支持到城市. 1. IPTools.China 快速查询中国IP地址信息,包含国家.省份.城市.和网络运营商.非中国IP只支持 ...

  3. 全球IP whois信息获取与情报挖掘

    全球IP的whois信息获取与情报挖掘 什么是whois信息? Whois是一种网络协议,也是一种网络服务,能够让客户端查询域名或者IP是否注册,以及注册人的相关信息.我们通常所说的whois信息就是 ...

  4. 任何快速查询IP归属地

    最近公司项目需要做一个IP归属地查询的功能,想着如果用现成的API就可以大大提高开发效率,所以在网上的API商店搜索了一番,发现了 APISpace,它里面的IP归属地API非常符合我的开发需求.   ...

  5. 基于redis的IP地址快速查询

    在一些大数据处理中,我们需要用到IP地址查询,一般为了查询一个IP属于哪个地址,我们通常需要根据一个IP数据库来查询,网络上比较常用的IP库是纯真IP数据库.IP数据库里面的记录一般存储方式为IP的开 ...

  6. ThinkPHP---TP拓展之获取IP信息

    [概论] (1)简述 在所有网站里,特别是用户管理系统,都喜欢记录用户访问的IP地址.对后期的业务开展有很大的意义,可以通过IP地址的记录访问出国内或全球范围内,哪一块用户比较多. 在后期做产品时,可 ...

  7. 从APNIC提取IP信息

    从APNIC提取IP信息 https://blog.csdn.net/nullzeng/article/details/17538009 Apnic介绍简而言之,Apnic是全球5个地区级的Inter ...

  8. PHP快速抓取快递信息

    <?php header("Content-type:text/html;charset=utf-8"); /** * Express.class.php 快递查询类 * @ ...

  9. 『Python』爬行搜索引擎结果获得指定主机二级域名及IP信息

    0x 00 前言 前天自己在玩的时候,自己通过百度搜索主机的二级域名感觉好麻烦,自已要一页页的去翻 而且人工识别是否是重复的二级域名也够蛋疼的,正好最近在学正则表达式,权当练手了 0x 00 代码 # ...

  10. 快速查询List中指定的数据

    时间:2017/5/15 作者:李国君 题目:快速查询List中指定的数据 背景:当List中保存了大量的数据时,用传统的方法去遍历指定的数据肯定会效率低下,有一个方法就是类似于数据库查询那样,根据索 ...

随机推荐

  1. 自底向上的语法分析,闭包、GOTO函数

    自底向上的语法分析 一.一个串ω归约(reduction)为文法开始符号的过程 关键问题: 1.何时进行规约,2.用哪个产生式规约 句柄右边的串ω一定只包含终结符号. 如果文法是无二义性的,那么文法的 ...

  2. Go 内存管理

    操作系统内存管理 操作系统管理内存的存储单元是页(page),在 linux 中一般是 4KB.而且,操作系统还会使用 虚拟内存 来管理内存,在用户程序中,我们看到的内存是不是真实的内存,而是虚拟内存 ...

  3. MockQueryable:LINQ查询模拟测试工具

    我们在项目开发过程中,单元测试是确保代码质量的重要环节.涉及数据库LINQ查询逻辑,就需要数据库配合,但这样可能出现性能和数据库并发等问题.下面给推荐一个开源库,为开发者提供了一种简便的方式来模拟LI ...

  4. Vulnhub经典靶机:from_sqli_to_shell_i386入门靶机

    靶机官网: https://www.vulnhub.com/entry/pentester-lab-from-sql-injection-to-shell,80/ 靶机镜像ISO下载地址:(转链) f ...

  5. archlinux 显卡驱动

    https://arch.icekylin.online/guide/rookie/graphic-driver.html archlinux 显卡驱动# 接天莲叶无穷碧,映日荷花别样红# 近年来,a ...

  6. Qt编写安防视频监控系统32-onvif信息获取

    一.前言 上一篇文章写的是onvif设备搜索,搜到这些设备以后,第一件事情就是要对设备信息获取一下,比如获取视频流地址,配置套件信息.码流信息.分辨率大小等,这些信息的获取根据具体的需要去获取,也没有 ...

  7. 欧拉OpenEuler安装MySQL8

    1. 安装mysql tar -xvf mysql-8.0.21-linux-glibc2.12-x86_64.tar mv mysql-8.0.21-linux-glibc2.12-x86_64 / ...

  8. 手写 PromiseA+ 实现,轻松通过 872 条用例

    手写 Promise/A+ 实现,轻松通过 872 条用例 规范参考:Promise/A+ 规范 - 中文版本 测试工具:https://github.com/promises-aplus/promi ...

  9. 9.24java wab实现创建新界面验证码

    <!DOCTYPE html> <html> <head> <title>User Login</title> <style> ...

  10. KES的执行计划分析与索引优化

    今天我们继续探讨国产数据库KES的相关内容,本次的讨论重点将放在SQL优化的细节上.作为Java开发人员,我们通常并不需要深入了解数据库的底层实现细节,而是更多地关注如何提升应用性能与数据库的交互效率 ...