compare two ip with C#

2019-02-16 17:57发布

How I can compare two IP address?

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

I need some like this:

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

标签: c# ip
6条回答
forever°为你锁心
2楼-- · 2019-02-16 18:26
IPAddress addr1 = IPAddress.Parse(ip1);
IPAddress addr2 = IPAddress.Parse(ip2);

return (addr1.Equals(addr2));
查看更多
我欲成王,谁敢阻挡
3楼-- · 2019-02-16 18:33

The IPAddress class (System.Net) has an overridden Equals method that will compare the addresses, not the object instances, which is what you want. String comparison here may be dangerous since it is possible for IP addresses to have more than one string representation. http://msdn.microsoft.com/en-us/library/system.net.ipaddress.equals%28v=VS.71%29.aspx

IPAddress.Parse(ip1).Equals(IPAddress.Parse(ip2))
查看更多
虎瘦雄心在
4楼-- · 2019-02-16 18:34

Check out Equals method on System.Net.IPAddress

查看更多
叛逆
6楼-- · 2019-02-16 18:41

It seems System.Net.IPAddress defines it's own Equals override so this should work:

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

if(ip1.Equals(ip2))
{
    //...
}
查看更多
孤傲高冷的网名
7楼-- · 2019-02-16 18:42

The type IPAddress in the BCL supports equality and can be used for this purpose.

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

Several people have wondered why a straight string comparison is not sufficient. The reason why is that an IP address can be legally represented in both base 10 and hexidecimal notation. So the same IP address can have more than 1 string representation.

For example

var left = "0x5.0x5.0x5.0x5";
var right = "5.5.5.5";
IsSameIPAddress(left,right); // true
left == right; // false
查看更多
登录 后发表回答