Получить все 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, будет ли она отображаться на основном?
Ответы
Ответ 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 не обязательно будет знать об этом.