C# - 确定 IP 地址范围是不是包含特定地址

Posted

技术标签:

【中文标题】C# - 确定 IP 地址范围是不是包含特定地址【英文标题】:C# - Determine if an IP address range contains a particular addressC# - 确定 IP 地址范围是否包含特定地址 【发布时间】:2011-08-21 10:13:06 【问题描述】:

在 C# 中,假设您有一个以字符串值表示的 IP 地址范围:

“192.168.1.1-192.168.2.30”

您还有一个 IP 地址,表示为字符串值,例如:

“192.168.1.150”

确定地址范围是否包含单个 IP 地址的最优雅方法是什么?

【问题讨论】:

【参考方案1】:

将 IP 转换为 32 位整数(IP 为 4 个字节,因此也可以表示为整数)。 检查范围只是检查给定 IP (int) 是否在其他两个 IP (另外 2 个 int) 之间。

if( low_range <= checked_ip <= high_range ) TRUE! 

【讨论】:

好主意。对于懒惰的人来说,(grin) 这里有一个 SO 答案,应该对此有所帮助:***.com/questions/461742/…【参考方案2】:

我刚刚写了一个小库IpSet来检查指定的IP地址是否包含在预定义的范围内。

var set = IpSet.ParseOrDefault("192.168.0.*,10.10.1.0/24,192.168.1.1-192.168.2.30");
var result = set.Contains("192.168.1.150"); // true

同时支持 IPv4 和 IPv6。 支持 CIDR 表示法。 底层工作是将 IP 地址转换为整数并进行比较。

【讨论】:

以上是关于C# - 确定 IP 地址范围是不是包含特定地址的主要内容,如果未能解决你的问题,请参考以下文章

C#实现任意源组播与特定源组播

墨西哥的 IP 地址列表? [关闭]

域名/IP/主机名

如何检查 IP 地址是不是来自 Java 中的特定网络/网络掩码?

python实现ip地址的包含关系判断

C# - 带有 IP 地址范围的端口扫描