如何比较两个IP地址?
string ip1 = "123.123.123.123";
string ip2 = "124.124.124.124";
我需要像这样的东西:
if(ip1 == ip2)
{
//true
}
看起来 System.Net.IPAddress 定义了自己的Equals重写,所以这应该可以工作:
IPAddress ip1 = IPAddress.Parse("123.123.123.123");
IPAddress ip2 = IPAddress.Parse("124.124.124.124");
if(ip1.Equals(ip2))
{
//...
}
IPAddress.Parse("172.16.0.150").Equals(IPAddress.Parse("172.16.1.216"))
对我来说返回了期望的 false。 - Lee在BCL中,IPAddress
类型支持相等性(equality)并可用于此目的。
public static bool IsSameIPAddress(string ip1, string ip2) {
IPAddress leftIP = IPAddress.Parse(ip1);
IPAddress rightIP = IPAddress.Parse(ip2);
return leftIP.Equals(rightIP);
}
很多人想知道为什么直接字符串比较不足够。原因是IP地址可以以十进制和十六进制表示法合法地呈现。因此,同一个IP地址可以有多个字符串表示。
例如:
var left = "0x5.0x5.0x5.0x5";
var right = "5.5.5.5";
IsSameIPAddress(left,right); // true
left == right; // false
leftIP==rightIP
会对相同的IP地址返回false!应该是return LeftIP.Equals(rightIP);
。 - KMån::
来缩短地址。 - JoeyIPAddress.Parse
支持的内容而言,这两种形式都是合法的。但我并不确定官方IP标准的具体规定。 - JaredParIPAddress addr1 = IPAddress.Parse(ip1);
IPAddress addr2 = IPAddress.Parse(ip2);
return (addr1.Equals(addr2));
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))
http://www.codeproject.com/Articles/26550/Extending-the-IPAddress-object-to-allow-relative-c
ping 2130706433
。 - R. Martinho Fernandes