2010-04-27 127 views
9

如何比較兩個IP地址?比較兩個ip與C#

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

我需要一些這樣的:

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

你怎麼會剛剛發佈不要滿足您的需求的代碼? – Luis 2010-04-27 15:35:34

+2

@Luis,因爲相同的IP地址可以有不同的字符串表示形式,因爲這些數字可以用十六進制和基本10表示法合法表示。 – JaredPar 2010-04-27 15:41:08

+1

@路易斯:試試這個:'ping 2130706433'。 – 2010-04-27 21:11:05

回答

22

方法似乎System.Net.IPAddress定義它自己的Equals重寫所以這​​應該工作:

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」)。Equals(IPAddress.Parse(「172.16.1.216」))'如我所願返回false。 – Lee 2017-07-13 07:53:04

17

類型IPAddress在BCL支持平等和可用於這一目的。

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

有幾個人想知道爲什麼直線比較是不夠的。爲什麼IP地址可以用10進制和十六進制表示法合法表示。所以相同的IP地址可以有多個字符串表示。

例如

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

@JaredPar:你的第一個代碼中的'leftIP == rightIP'將會爲同一個IP地址返回false!它應該是'返回LeftIP.Equals(rightIP);' – 2010-04-27 15:49:24

+1

@KMan,剛剛注意到我自己並更新了我的帖子。感謝您指出! – JaredPar 2010-04-27 15:49:55

+0

十六進制對我來說是新的東西。有趣。 IPv6也會變得越來越糟糕,因爲你沒有*在那裏用'::'縮短地址。 – Joey 2010-04-27 15:50:48

2

退房的Equals上System.Net.IPAddress

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

return (addr1.Equals(addr2));