Как получить список системных IP-адресов в Windows 2008 и .NET, которые ВКЛЮЧАЮТ «скипасурс» адреса? - PullRequest
2 голосов
/ 30 марта 2012

У меня есть некоторый существующий код, который отлично работал под 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
    }
}

1 Ответ

2 голосов
/ 30 марта 2012

skipassource предназначен для того, чтобы не включать IP-адрес в систему имен DNS, поэтому я думаю, что вы должны найти другой способ, чем Dns.GetHostEntry

Вы пытались взглянуть на System.Net.NetworkInformationnamespace?

Я думаю, что если вы перебираете адаптеры через GetAllNetworkInterfaces, тогда вызываете GetIPProperties, чтобы получить свойства IP адаптера, а затем проверяете UnicastAddresses, который вы можете создать список IP-адресов.Не проверено.

См. Также: http://msdn.microsoft.com/de-de/library/system.net.networkinformation.networkinterface.getallnetworkinterfaces.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...