在C#中,假设你有一个IP地址范围表示为一个字符串值:C# - 确定某个IP地址范围包含一个特定的地址
“192.168.1.1-192.168.2.30”
和你也有表现为像一个字符串值的单个IP地址:
“192.168.1.150”
什么是确定的地址范围包含单个IP地址的最优雅的方式?
在C#中,假设你有一个IP地址范围表示为一个字符串值:C# - 确定某个IP地址范围包含一个特定的地址
“192.168.1.1-192.168.2.30”
和你也有表现为像一个字符串值的单个IP地址:
“192.168.1.150”
什么是确定的地址范围包含单个IP地址的最优雅的方式?
将IP转换为32位整数(IP为4个字节,因此也可以表示为整数)。 检查范围只是检查给定的IP(int)是否在两个其他IP(其他两个int)之间。
if(low_range <= checked_ip <= high_range){ TRUE! }
我只是写了一个小图书馆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地址转换为整数并进行比较。
好主意。而对于懒惰的,(*笑脸*)这里是一个SO的答案,应该有所帮助:http://stackoverflow.com/questions/461742/how-to-convert-an-ipv4-address-into-a-integer -in-C – 2012-09-07 17:49:11