сравните два IP с C#

Как я могу сравнить два IP-адреса?

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

Мне нужно, некоторым нравится это:

if(ip1 == ip2)
{
   //true
}
9
задан Joey 27 April 2010 в 15:37
поделиться

5 ответов

Кажется, System.Net.IPAddress определяет собственное переопределение Equals, так что это должно работать:

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

if(ip1.Equals(ip2))
{
    //...
}
25
ответ дан 4 December 2019 в 06:04
поделиться

Тип 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-адрес может быть юридически представлен как в десятичной системе счисления, так и в шестнадцатеричной системе счисления. Таким образом, один и тот же IP-адрес может иметь более одного строкового представления.

Например

var left = "0x5.0x5.0x5.0x5";
var right = "5.5.5.5";
IsSameIPAddress(left,right); // true
left == right; // false
18
ответ дан 4 December 2019 в 06:04
поделиться

Класс IPAddress (System.Net) имеет переопределенный метод Equals, который сравнивает адреса, а не экземпляры объектов, как вам нужно. Сравнение строк здесь может быть опасным, поскольку IP-адреса могут иметь более одного строкового представления. http://msdn.microsoft.com/en-us/library/system.net.ipaddress .equals% 28v = VS.71% 29.aspx

IPAddress.Parse(ip1).Equals(IPAddress.Parse(ip2))
1
ответ дан 4 December 2019 в 06:04
поделиться
IPAddress addr1 = IPAddress.Parse(ip1);
IPAddress addr2 = IPAddress.Parse(ip2);

return (addr1.Equals(addr2));
1
ответ дан 4 December 2019 в 06:04
поделиться

Ознакомьтесь с методом Equals на ] System.Net.IPAddress

2
ответ дан 4 December 2019 в 06:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: