compare two ip with C#

17,243

Solution 1

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))
{
    //...
}

Solution 2

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

Solution 3

Check out Equals method on System.Net.IPAddress

Solution 4

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))

Solution 5

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

return (addr1.Equals(addr2));
Share:
17,243

Related videos on Youtube

user319854
Author by

user319854

Updated on December 12, 2020

Comments

  • user319854
    user319854 about 3 years

    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
    }
    
    • Luis
      Luis over 13 years
      How come the code you just posted dont suit your needs?
    • JaredPar
      JaredPar over 13 years
      @Luis, because the same IP address can have a different string representation since the numbers can legally be represented in both hex and base 10 notation.
    • R. Martinho Fernandes
      R. Martinho Fernandes over 13 years
      @Luis: Try this: ping 2130706433.
  • KMån
    KMån over 13 years
    @JaredPar: leftIP==rightIP in your first code would return false for same IP address! It should be return LeftIP.Equals(rightIP);
  • JaredPar
    JaredPar over 13 years
    @KMan, just noticed that myself and updated my post. Thanks for pointing it out!
  • Rich
    Rich over 13 years
    The hex stuff was new to me. Interesting. It also gets worse with IPv6, since you don't have to shorten the addresses with :: there.
  • Powerlord
    Powerlord over 13 years
    I've never seen dotted hex format used. non-dotted hex yes (0x05050505), but never dotted hex.
  • JaredPar
    JaredPar over 13 years
    @OMG Unicorns, both forms are legal at least in respect to what IPAddress.Parse supports. I'm not sure about the official IP standard off the top of my head though.
  • Lee
    Lee over 6 years
    @PhucNguyen - IPAddress.Parse("172.16.0.150").Equals(IPAddress.Parse("172.‌​16.1.216")) returns false for me as expected.

Related