How to enumerate all available network interfaces?

2019-02-16 15:35发布

问题:

This question already has an answer here:

  • How to enumerate network adapters and get their MAC addresses in Win32 API C++? 1 answer

How to enumerate all network interfaces currently available on the computer (including virtual, non-connected, loopback etc)?

I need to know their IP4/6, Mask, Gateway, DNS, WINS etc


Language: C++, WinAPI

System: Windows 2000 and higher (including Win7)

回答1:

Have a look at http://www.codeproject.com/KB/IP/netcfg.aspx. It's a giant example of what you want to do.



回答2:

It sounds like you want a combination of a few different functions.

To get a list of adapters with their IPv4 addresses/masks, associated WINS servers and DNS servers, you can use GetAdaptersInfo. To get IPv6 addresses, you can use GetAdaptersAddresses.

Depending on what is included in your "etc." you might also want GetIfTable and GetIfEntry. GetIfTable gets a list of network adapters. GetIfEntry gets you information about each. These retrieve things like the amount of data that's been transmitted/retrieved over a particular interface. There's also a GetIfTable2/GetIfEntry2 that are only for Vista and newer that get more information.

If memory serves, GetIfTable/GetIfEntry list all the interfaces in the machine. GetAdaptersInfo only works with the "real" adapters.



回答3:

Perversely you can use getaddrinfo ("..localmachine") to enumerate interfaces on Windows 2003+.

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

Windows 7 with Service Pack 1 (SP1) and Windows Server 2008 R2 with Service Pack 1 (SP1) add support to hide interfaces.

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