2010-04-27 6 views
9

Wie kann ich zwei IP-Adresse vergleichen?Vergleichen Sie zwei IP mit C#

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

Ich brauche einige wie folgt aus:

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

Wie kommt es, den Code Sie auf dem Laufenden nur Sie nicht Ihre Bedürfnisse? – Luis

+2

@Luis, weil die gleiche IP-Adresse eine andere String-Darstellung haben kann, da die Zahlen sowohl in Hex- als auch in Base-10-Schreibweise dargestellt werden können. – JaredPar

+1

@Luis: Versuchen Sie Folgendes: 'ping 2130706433'. –

Antwort

22

Es scheint System.Net.IPAddress definiert es eigene Equals überschreiben ist so sollte diese Arbeit:

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

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

@PhucNguyen - 'IPAddress.Parse (" 172.16.0.150 "). Entspricht (IPAddress.Parse (" 172.16.1.216 "))' gibt für mich wie erwartet den Wert false zurück. – Lee

17

Der Typ IPAddress in der BCL unterstützt Gleichheit und kann für diesen Zweck verwendet werden.

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

Mehrere Leute haben sich gefragt, warum ein Vergleich mit geraden Strings nicht ausreicht. Der Grund dafür ist, dass eine IP-Adresse sowohl in der Basis 10 als auch in der Hexadezimalnotation legal dargestellt werden kann. Die gleiche IP-Adresse kann also mehr als eine String-Repräsentation haben.

Zum Beispiel

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

@JaredPar: 'leftIP == rightIP' in Ihrem ersten Code würde false für dieselbe IP-Adresse zurückgeben! Es sollte 'Return LeftIP.Equals (rightIP);' –

+1

@KMan, gerade bemerkt, dass ich selbst und aktualisiert meinen Beitrag. Danke für das Aufzeigen! – JaredPar

+0

Das Hex-Zeug war neu für mich. Interessant. Bei IPv6 wird es auch schlechter, da man die Adressen mit '::' dort nicht kürzen muss. – Joey

2

Check out Equals Methode auf System.Net.IPAddress

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

return (addr1.Equals(addr2));