Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to enumerate all available network interfaces? [duplicate]

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)

like image 623
Andrew Avatar asked Mar 06 '11 21:03

Andrew


3 Answers

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

like image 193
bmargulies Avatar answered Nov 19 '22 20:11

bmargulies


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.

like image 39
Jerry Coffin Avatar answered Nov 19 '22 21:11

Jerry Coffin


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

like image 40
Steve-o Avatar answered Nov 19 '22 20:11

Steve-o