如何比较两种不同的IP?

时间:2012-10-16 14:38:49

标签: c# ip

  

可能重复:
  compare two ip with C#

如何比较两个IP?通过比较,我的意思是告诉IP1是否大于IP2。那可能吗?如我所见,IPAddress没有该功能。

2 个答案:

答案 0 :(得分:0)

编辑:请参阅the answer here了解更优雅的内容。但是请注意关于endian-ness的警告。

Pranay Rana的答案从根本上被打破:比较'11 .2.3.4'和'1.12.3.4'将表明他们是平等的。他们显然不是。

IP地址本质上是特定形式的32位整数。您可以使用这个事实来编写一个简单的函数,它接受字符串值并为您提供整数,这更容易与之比较:

static void Main(string[] args)
{
    string ip1 = "11.2.3.4";
    string ip2 = "1.12.3.4";
    uint ipInt1 = ipAddressToInt(ip1);
    uint ipInt2 = ipAddressToInt(ip2);
    Console.WriteLine(ipInt1 < ipInt2);
    Console.ReadLine();
}

private static uint ipAddressToInt(string ip)
{
    uint retVal;
    System.Net.IPAddress ipAddress = System.Net.IPAddress.Parse(ip);
    byte[] IPBytes = ipAddress.GetAddressBytes(); 

    retVal = (uint)IPBytes[3] << 24;
    retVal += (uint)IPBytes[2] << 16;
    retVal += (uint)IPBytes[1] << 8;
    retVal += (uint)IPBytes[0]; 
    return retVal;
}

注意ipAddressToInt函数中的System.Net.IPAddress.Parse。这会在使用输入字符串之前对其进行验证。

答案 1 :(得分:-1)

编辑(这可能适用于评论中指定的所有条件)

string ip1= "1.2.3.4";
string ip2 ="5.6.7.8";

string[] ip1S = ip1.Split(new char[] {'.'});
string[] ip2S = ip2.Split(new char[] {'.'});

for(int i=0;i<4;i++)
{
  if(Convert.ToInt32(ip1S[i]) > Convert.ToInt32(ip2S[i]))
  {
    Console.WriteLine("ip1 is higher");
    break;
  }
  else if(Convert.ToInt32(ip2S[i]) > Convert.ToInt32(ip1S[i])) 
   {
    Console.WriteLine("ip2 is higher");
    break;
  }  
}

你可以像这样做

字符串comapre
string ip1= "1.2.3.4";
string ip2 ="5.6.7.8";

string ip1R = ip1.Replace(".","");
string ip2R = ip2.Replace(".","");


Console.WriteLine(String.Compare(ip1R ,ip2R ));

输出

A negative integer    str1 is less than str2.
0                     str1 equals str2.
A positive integer    This instance is greater than value.
-or-
1

在MSDN上进行更多字符串比较:http://msdn.microsoft.com/en-us/library/fbh501kz(v=vs.80).aspx