Как перечислить все доступные сетевые интерфейсы?

Как перечислить все сетевые интерфейсы, доступные на данный момент на компьютере (включая виртуальные, не связанные, loopback и т.д.)?

Мне нужно знать их IP4/6, Mask, Gateway, DNS, WINS и т.д.


Язык: С++, WinAPI

Система: Windows 2000 и выше (включая Win7)

Ответ 2

Похоже, вам нужна комбинация нескольких различных функций.

Чтобы получить список адаптеров с их IPv4-адресами/масками, связанными WINS-серверами и DNS-серверами, вы можете использовать GetAdaptersInfo. Чтобы получить адреса IPv6, вы можете использовать GetAdaptersAddresses.

В зависимости от того, что включено в ваш "и т.д.", вам также могут понадобиться GetIfTable и GetIfEntry. GetIfTable получает список сетевых адаптеров. GetIfEntry получает информацию о каждом из них. Они извлекают такие вещи, как объем данных, которые были переданы/извлечены по определенному интерфейсу. Там также есть GetIfTable2/GetIfEntry2, которые предназначены только для Vista и новее, которые получают дополнительную информацию.

Если память обслуживается, GetIfTable/GetIfEntry перечислит все интерфейсы в аппарате. GetAdaptersInfo работает только с "настоящими" адаптерами.

Ответ 3

Неправильно вы можете использовать getaddrinfo ("..localmachine") для перечисления интерфейсов в Windows 2003 +.

http://msdn.microsoft.com/en-us/library/ms738520(v=vs.85).aspx

Windows 7 с пакетом обновления 1 (SP1) и Windows Server 2008 R2 с пакетом обновления 1 (SP1) добавляет поддержку для скрытия интерфейсов.

http://support.microsoft.com/kb/2386184