用C#比较两个ip

时间:2010-04-27 15:34:27

标签: c# ip

如何比较两个IP地址?

string ip1 = "123.123.123.123";
string ip2 = "124.124.124.124";

我需要这样的一些:

if(ip1 == ip2)
{
   //true
}

6 个答案:

答案 0 :(得分:24)

似乎System.Net.IPAddress定义了它自己的Equals覆盖,所以这应该有效:

IPAddress ip1 = IPAddress.Parse("123.123.123.123");
IPAddress ip2 = IPAddress.Parse("124.124.124.124");

if(ip1.Equals(ip2))
{
    //...
}

答案 1 :(得分:17)

BCL中的IPAddress类型支持相等,可用于此目的。

public static bool IsSameIPAddress(string ip1, string ip2) {
  IPAddress leftIP = IPAddress.Parse(ip1);
  IPAddress rightIP = IPAddress.Parse(ip2);
  return leftIP.Equals(rightIP);
}

有些人想知道为什么直接字符串比较是不够的。原因是IP地址可以合法地表示为基数10和十六进制表示法。因此,相同的IP地址可以有多于1个字符串表示。

例如

var left = "0x5.0x5.0x5.0x5";
var right = "5.5.5.5";
IsSameIPAddress(left,right); // true
left == right; // false

答案 2 :(得分:2)

System.Net.IPAddress

上查看Equals方法

答案 3 :(得分:1)

IPAddress类(System.Net)有一个重写的Equals方法,它将比较地址,而不是对象实例,这就是你想要的。这里的字符串比较可能很危险,因为IP地址可能有多个字符串表示。 http://msdn.microsoft.com/en-us/library/system.net.ipaddress.equals%28v=VS.71%29.aspx

IPAddress.Parse(ip1).Equals(IPAddress.Parse(ip2))

答案 4 :(得分:1)

IPAddress addr1 = IPAddress.Parse(ip1);
IPAddress addr2 = IPAddress.Parse(ip2);

return (addr1.Equals(addr2));

答案 5 :(得分:1)