在C#中,假设您有一个表示为字符串值的IP地址范围:
"192.168.1.1-192.168.2.30"
同时您也有一个表示为字符串值的单个IP地址:
"192.168.1.150"
那么,最优雅的方法是什么来确定地址范围是否包含单个IP地址?
"192.168.1.1-192.168.2.30"
同时您也有一个表示为字符串值的单个IP地址:
"192.168.1.150"
那么,最优雅的方法是什么来确定地址范围是否包含单个IP地址?
将IP地址转换为32位整数(IP地址由4个字节组成,因此也可以表示为整数)。 然后检查范围只需要检查给定的IP地址(整数)是否位于另外两个IP地址(整数)之间。
if( low_range <= checked_ip <= high_range ){ TRUE! }
我刚刚写了一个小库IpSet,它可以检查指定的IP地址是否包含在预定义的范围内,与IT技术有关。
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地址转换为整数并进行比较。