Подтвердить что ты не робот

Получить все IP-адреса на машине

Как я могу получить все IP-адреса, прикрепленные к машине, на которых работает мое приложение (приложение С# NET Console)? Мне нужно связать службу WCF с основным IP-адресом и вернуть список полного списка IP-адресов.

using System.Net;

string myHostName = Dns.GetHostName().ToString();
string ipAddress = Dns.Resolve(HostName).AddressList[0].ToString();

Это то, что я использую сейчас, чтобы получить первичный IP-адрес, но я не могу понять, как заставить остальных вернуть их.

Если я привяжу службу WCF к localhost: 8000, будет ли она отображаться на основном?

4b9b3361

Ответ 1

Я думаю, что этот пример должен помочь вам.

// Get host name
String strHostName = Dns.GetHostName();

// Find host by name
IPHostEntry iphostentry = Dns.GetHostByName(strHostName);

// Enumerate IP addresses
foreach(IPAddress ipaddress in iphostentry.AddressList)
{
    ....
}

Edit:

"Нет такой вещи, как" первичный "IP-адрес.

Таблица маршрутизации определяет, какой внешний IP-адрес используется в зависимости от IP-адреса назначения (а также расширения, сетевого интерфейса, который сам по себе может быть виртуальным или физическим).

Ответ 2

Варианты DNS работают по сети, но одна запись DNS может иметь много IP-адресов, а один IP-адрес может иметь много записей DNS. Что еще более важно, адрес не обязательно должен быть привязан к записи DNS.

Для локальной машины попробуйте следующее: -

  foreach (NetworkInterface netInterface in NetworkInterface.GetAllNetworkInterfaces())
  {
    Console.WriteLine("Name: " + netInterface.Name);
    Console.WriteLine("Description: " + netInterface.Description);
    Console.WriteLine("Addresses: ");
    IPInterfaceProperties ipProps = netInterface.GetIPProperties();
    foreach (UnicastIPAddressInformation addr in ipProps.UnicastAddresses)
    {
      Console.WriteLine(" " + addr.Address.ToString());
    }
    Console.WriteLine("");
  }

Ответ 3

Почему бы просто не привязать к 0.0.0.0?
Таким образом, вы слушаете все ips

Ответ 4

Вероятно, вы должны привязаться к 0.0.0.0:8000, который будет раскрывать его на всех доступных IP-адресах и привязываться только к определенному IP-адресу, если этого требует пользователь/администратор.

Ответ 5

IPAddress[] localIPs = Dns.GetHostAddresses(Dns.GetHostName());

Ответ 6

Я думаю, что OP спрашивает о том, как получить все адреса на локальной сетевой карте, а не только о тех адресах, которые известны DNS. Поначалу он, вероятно, означает основной адрес под "использовать следующий IP-адрес" в свойствах адаптера, а "остальным" он, вероятно, означает те, которые перечислены в Advanced > (Дополнительные) IP-приложения.

DNS не обязательно будет знать об этом.