Получить все IP-адреса на машине - PullRequest
21 голосов
/ 11 марта 2011

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

using System.Net;

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

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

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

Ответы [ 6 ]

44 голосов
/ 11 марта 2011

Варианты 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("");
  }
9 голосов
/ 11 марта 2011

Думаю, этот пример вам поможет.

// 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)
{
    ....
}

Редактировать:

"Нет такого понятия, как" основной "IP-адрес.

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

6 голосов
/ 11 марта 2011

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

1 голос
/ 11 марта 2011

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

1 голос
/ 11 марта 2011
IPAddress[] localIPs = Dns.GetHostAddresses(Dns.GetHostName());
0 голосов
/ 21 апреля 2016

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

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

...