随意的两个IP段,怎样判断他们是否有交集
任意的两个IP段,怎样判断他们是否有交集?
如题:在ASP.NET 环境下,任意的两个IP段,怎样判断他们是否有交集?如果有交集的话,求他们交集的部分。
------解决思路----------------------
什么叫有交集,给出两个例子来
------解决思路----------------------
你把IP转换为了再进行判断处理即可
------解决思路----------------------
不知道下面方法行不行
把起始ip地址转成数值,如192.168.0.1-192.168.0.255转成数值192<<24+168<<16+1 - 192<<24+168<<16+255
然后看这两个起始数值是否有交集
------解决思路----------------------
如果你所谓的"交集"就是对二进制进行与运算的话
直接把IP字符串转IP格式,然后获取IP的int型表示
两个int做&运算
------解决思路----------------------
有相同的数字段就算交集吗?
arraylist ar1=split(.)
arraylist ar2=split(.)
for(int i=0;i<ar1.lenght,i++)
如题:在ASP.NET 环境下,任意的两个IP段,怎样判断他们是否有交集?如果有交集的话,求他们交集的部分。
------解决思路----------------------
什么叫有交集,给出两个例子来
------解决思路----------------------
你把IP转换为了再进行判断处理即可
/// <summary>
/// 判断IP是否在IP段里
/// </summary>
/// <param name="start"></param>
/// <param name="end"></param>
/// <param name="current"></param>
/// <returns></returns>
public static bool BetweenIP(string start, string end, string current)
{
bool result = false;
if (current == "::1") current = "127.0.0.1";
if (current == start) result = true;//如果指定的IP范围就是一个IP,那么直接匹配看是否相等
else//如果指定IP范围 是一个起始IP范围区间
{
byte[] start_ip_array = Get4Byte(start);//将点分十进制 转换成 4个元素的字节数组
byte[] end_ip_array = Get4Byte(end);
byte[] ip_array = Get4Byte(current);
bool tmpRes = true;
for (int i = 0; i < 4; i++)
{
//从左到右 依次比较 对应位置的 值的大小 ,一旦检测到不在对应的范围 那么说明IP不在指定的范围内 并将终止循环
if (ip_array[i] > end_ip_array[i]
------解决思路----------------------
ip_array[i] < start_ip_array[i])
{
tmpRes = false; break;
}
}
result = tmpRes;
}
return result;
}
/// <summary>
/// 将IP四组值 转换成byte型
/// </summary>
/// <param name="ip"></param>
/// <returns></returns>
static byte[] Get4Byte(string ip)
{
string[] _i = ip.Split('.');
List<byte> res = new List<byte>();
foreach (var item in _i)
{
res.Add(Convert.ToByte(item));
}
return res.ToArray();
}
------解决思路----------------------
不知道下面方法行不行
把起始ip地址转成数值,如192.168.0.1-192.168.0.255转成数值192<<24+168<<16+1 - 192<<24+168<<16+255
然后看这两个起始数值是否有交集
------解决思路----------------------
如果你所谓的"交集"就是对二进制进行与运算的话
直接把IP字符串转IP格式,然后获取IP的int型表示
两个int做&运算
------解决思路----------------------
有相同的数字段就算交集吗?
arraylist ar1=split(.)
arraylist ar2=split(.)
for(int i=0;i<ar1.lenght,i++)