IMPORTANT EDIT: Back again on this subject. As you said there should be no default NIC, I'm trying to understand if there is a way to detect all the NICs that are actually connected.
Having the MAC address of my physical interface is there a programmatic way to get interface name/interface status/etc...
For example, my XP machine:
Device Realtek RTL8139 Family PCI Fast Ethernet NIC MAC XXXX-XXXX-XXXX
XXXX-XXXX-XXXX is what I know
Through this device I connect using "Local Area Connection" connection (with all the info related as gateway, subnet, ...)
So I'm searching for the link between XXXX-XXXX-XXXX and Local Area Connection.
Hope everything is clear now.
Thanks all! P.S. Sorry for the delay... +1 vote to all, for patience!
Old question
Hi all, I'd like to change the IP of "Local Area Connection" by using the command netsh.
My issue is is there a programmatic way to get the default connection name (i.e. exactly "Local Area Connection")?
Thanks
EDIT: I don't need the list of all the connection names but only the default one. Accessing the registry I get the list and it seems that the default is marked with a *. Unfortunately, printing them on a console I get kind of 10 different "Local Area Connection" like...
Local Area Connection* 13
6TO4 Adapter
VMware Network Adapter VMnet1
Wireless Network Connection 2
Reusable ISATAP Interface {483968F2-DBF9-4596-B8BE-725FAAB89F93}
Local Area Connection* 3
Local Area Connection* 2
Reusable Microsoft 6To4 Adapter
Local Area Connection* 7
VMware Network Adapter VMnet8
Local Area Connection* 8
isatap.replynet.prv
Local Area Connection* 9
Local Area Connection* 12
isatap.{FAA80CE0-D641-408A-83F8-5F9C394FFD76}
Bluetooth Network Connection
Local Area Connection* 4
isatap.{40156BF9-6599-4912-A315-62DE5342B452}
isatap.{7651F2F5-4888-4258-92C5-6822C506D726}
Local Area Connection* 5
isatap.{34F5F074-8AA7-4421-AE24-131BA2DC3458}
Local Area Connection*
Local Area Connection* 10
Local Area Connection
Local Area Connection* 6
Wireless Network Connection
and so on...
EDIT2: @ho1 running your code changing FriendlyName that doesn't exists with Name you'll get something like the list behind, unfortunately it doesn't seem to be the output expected
0 - WAN Miniport (SSTP)
1 - WAN Miniport (IKEv2)
2 - WAN Miniport (L2TP)
3 - WAN Miniport (PPTP)
4 - WAN Miniport (PPPOE)
5 - WAN Miniport (IPv6)
6 - WAN Miniport (Network Monitor)
7 - Realtek RTL8168C(P)/8111C(P) Family PCI-E Gigabit Ethernet NIC (NDIS 6.20)
8 - WAN Miniport (IP)
9 - Microsoft ISATAP Adapter
10 - RAS Async Adapter
11 - Broadcom 802.11g Network Adapter
12 - Microsoft 6to4 Adapter
13 - VMware Virtual Ethernet Adapter for VMnet1
14 - Microsoft ISATAP Adapter #3
15 - VMware Virtual Ethernet Adapter for VMnet8
16 - Microsoft ISATAP Adapter #2
17 - Microsoft ISATAP Adapter #4
18 - Microsoft Virtual WiFi Miniport Adapter
19 - Microsoft ISATAP Adapter #5
20 - Microsoft ISATAP Adapter
22 - Bluetooth Device (Personal Area Network)
23 - Microsoft 6to4 Adapter
24 - Microsoft 6to4 Adapter #3
25 - Microsoft 6to4 Adapter #2
You can use the WMI class Win32_NetworkAdapter to enumerate all the adapters and it has an
Index
property which might mean that the one with 0 or 1 as theIndex
is the default one, or one of the other properties might help to find the default one.Something like this maybe:
Edit: Fixed broken code (this is at least more likely to work). But following what abatishchev said I think you might need to use
Win32_NetworkAdapterConfiguration.IPConnectionMetric
to find the default adapter...or more elegant solution:
or if you want to practice in LINQ:
Usage:
You can get a list of them, but not the default (perhaps you can assume it is the first entry).
As others have mentioned, there is no "Default" NIC adapter in Windows. The NIC used is chosen based on the destination network (address) and the metric.
For example, if you have two NICs and two different networks:
And you want to connect to
10.1.10.15
, Windows will chooseLocal Area Connection
and route that way. Conversely, if you want to connect to10.1.50.30
, Windows will chooseLocal Area Connection 2
.Now, if you try to connect to
74.125.67.106
(google.com), Windows will chooseLocal Area Connection 2
because it has a lower metric value.EDIT: Here is a great article explaining routing - http://www.windowsnetworking.com/articles_tutorials/Making-Sense-Windows-Routing-Tables.html
EDIT2: Spelling.
Hope this helps.
A friend of mine (Ciro D.A.) had same problem. Playing around a bit with c#, we seemed to find a way to skip virtual (not really connected Ip): we looked for gateaway discarding not only those that did not have it, but also those who had a dummy (0.0.0.0) one. On my machine, these last where exactly two Vm-Ware virtual adapters.
This is a dirty way of doing it as it can be optimized by incorporating LINQ, etc
you'll probably want to tailor your results by using the results from
nic.GetIPProperties()
andnic.GetIPProperties().GetIPv4Properties()