У меня есть некоторый существующий код, который отлично работал под Windows 2003, чтобы получить список IP-адресов, привязанных к серверу:
foreach (IPAddress addr in (Dns.GetHostEntry(Dns.GetHostName())).AddressList)
{
// Code here to act on each address
}
Когда я запускаю этот код на нашем сервере Windows 2008, он возвращает только один IP-адрес. После дальнейшего изучения кажется, что все остальные IP-адреса, которые прослушивает компьютер, были добавлены с помощью команды netsh int ipv4 add address
и указания флага skipassource=true
.
Есть ли способ включить эти адреса в мой запрос, то есть вернуть ВСЕ адреса на сервере?
(Если вам интересно, флаг skipassource=true
был установлен, потому что Windows 2008 ввел новое поведение в сети, которое позволяет ему решать, какой из ваших IP-адресов он считает «основным», а остальные наши приложения полагаются на нас. возможность выбора основного. Единственный способ сделать это в Windows 2008 - пометить все остальные адреса как skipassource=true
.)
Редактировать Этот вопрос теперь просто для того, чтобы удовлетворить мое любопытство, так как я работал над этой проблемой. Мой оригинальный код, приведенный выше, использовался для запуска всех IP-адресов на сервере и проверки соответствия найденного IP-адреса. Теперь я проверяю, работает ли на сервере, на котором я работаю, служба, которая прослушивает этот конкретный IP-адрес / порт, поэтому мне больше не нужно перебирать ВСЕ IP-адреса. Тем не менее, мне было бы интересно услышать, если есть ответ на оригинальный вопрос.
Редактировать Спасибо @aKzenT за решение этой проблемы. Теперь я использую NetworkInteface.GetAllNetworkInterfaces()
для получения доступа ко всем IP-адресам, а не Dns.GetHostEntry()
. Мой окончательный код выглядит так:
foreach (NetworkInterface netface in NetworkInterface.GetAllNetworkInterfaces())
{
foreach (UnicastIPAddressInformation uni in netface.GetIPProperties().UnicastAddresses)
{
IPAddress addr = uni.Address;
// Code here to act on each address
}
}