用C#比较两个ip

我如何比较两个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)) { //... } 

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和hex表示法。 因此,相同的IP地址可以具有多于1个字符串表示。

例如

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

查看System.Net.IPAddress Equals方法

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)) 
 IPAddress addr1 = IPAddress.Parse(ip1); IPAddress addr2 = IPAddress.Parse(ip2); return (addr1.Equals(addr2));