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
}
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
}
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))
{
//...
}
@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
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
@JaredPar: 'leftIP == rightIP' in Ihrem ersten Code würde false für dieselbe IP-Adresse zurückgeben! Es sollte 'Return LeftIP.Equals (rightIP);' –
@KMan, gerade bemerkt, dass ich selbst und aktualisiert meinen Beitrag. Danke für das Aufzeigen! – JaredPar
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
Check out Equals Methode auf System.Net.IPAddress
Die IPAddress
Klasse (System.Net) hat eine überschriebene Equals-Methode, die die Adressen und nicht die Objektinstanzen vergleicht, die Sie wünschen. Der String-Vergleich kann gefährlich sein, da IP-Adressen mehr als eine String-Repräsentation haben können. 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));
können Sie diese Klasse verwenden IpAddress vergleichen:
http://www.codeproject.com/Articles/26550/Extending-the-IPAddress-object-to-allow-relative-c
Wie kommt es, den Code Sie auf dem Laufenden nur Sie nicht Ihre Bedürfnisse? – Luis
@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
@Luis: Versuchen Sie Folgendes: 'ping 2130706433'. –