重要编辑:再次回到这个主题。正如您所说的,不应该有默认的NIC,我正在尝试理解是否有一种方法来检测所有实际连接的NIC。
有我的物理接口的MAC地址有一种编程的方法来获得接口名称/接口状态/等等.
例如,我的XP机器:
设备Realtek RTL8139系列PCI快速以太网网卡MAC XXXX-XXXX-XXXX
我只知道XXXX-XXXX-XXXX
通过这个设备,我使用“局域网连接”连接(与所有信息相关的网关,子网,.)
所以我在寻找XXXX-XXXX-XXXX和局域网连接之间的链接。
希望现在一切都清楚了。
谢谢大家!抱歉耽搁了..。+1投给所有人,为了耐心!
老问题
大家好,我想通过使用命令netsh来更改“本地连接”的IP。
我的问题是,是否有一种编程方法来获得默认连接名称(即,确切地说是“本地连接”)?
谢谢
编辑:我不需要所有连接名称的列表,而只需要默认的连接名称。访问注册表时,我会得到列表,而且默认的标记似乎是*。不幸的是,在控制台上打印它们我得到了10种不同的“局部连接”,比如.
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等等..。
EDIT2:@ho1运行您的代码,更改不以名称存在的FriendlyName,您将得到类似于后面列表的内容,不幸的是,它似乎不是预期的输出
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发布于 2010-09-08 17:01:57
这是一种肮脏的方法,因为它可以通过合并LINQ等来进行优化。
using System.Net.NetworkInformation;
List<NetworkInterface> Interfaces = new List<NetworkInterface>();
foreach (var nic in NetworkInterface.GetAllNetworkInterfaces())
{
if (nic.OperationalStatus == OperationalStatus.Up)
{
Interfaces.Add(nic);
}
}
NetworkInterface result = null;
foreach (NetworkInterface nic in Interfaces)
{
if (result == null)
{
result = nic;
}
else
{
if (nic.GetIPProperties().GetIPv4Properties() != null)
{
if (nic.GetIPProperties().GetIPv4Properties().Index < result.GetIPProperties().GetIPv4Properties().Index)
result = nic;
}
}
}
Console.WriteLine(result.Name);您可能希望通过使用nic.GetIPProperties()和nic.GetIPProperties().GetIPv4Properties()的结果来调整结果
发布于 2010-08-11 16:36:57
正如其他人所提到的,Windows中没有“默认”NIC适配器。所使用的网卡是根据目标网络(地址)和度量来选择的。
例如,如果您有两个NIC和两个不同的网络:
10.1.10.1 - Local Area Connection (metric 20)
10.1.50.1 - Local Area Connection 2 (metric 10)如果您想连接到10.1.10.15,Windows将选择Local Area Connection并以这种方式进行路由。相反,如果您想连接到10.1.50.30,Windows将选择Local Area Connection 2。
现在,如果您试图连接到74.125.67.106 (google.com),Windows将选择Local Area Connection 2,因为它的度量值较低。
编辑:这里有一篇很好的文章解释路由- tutorials/Making-Sense-Windows-Routing-Tables.html
EDIT2:拼写。
希望这能有所帮助。
发布于 2010-08-11 10:06:18
using System.Linq;
using System.Net.NetworkInformation;
var nic = NetworkInterface
.GetAllNetworkInterfaces()
.FirstOrDefault(i => i.NetworkInterfaceType != NetworkInterfaceType.Loopback && i.NetworkInterfaceType != NetworkInterfaceType.Tunnel);
var name = nic.Name;或者更优雅的解决方案:
.Where(i => !(
new[] { NetworkInterfaceType.Loopback, NetworkInterfaceType.Tunnel }
.Contains(i.NetworkInterfaceType)))或者如果您想在LINQ中练习:
static IEnumerable<NetworkInterface> GetAllNetworkInterfaces(IEnumerable<NetworkInterfaceType> excludeTypes)
{
var all = NetworkInterface.GetAllNetworkInterfaces();
var exclude = all.Where(i => excludeTypes.Contains(i.NetworkInterfaceType));
return all.Except(exclude);
}用法:
var nic = GetAllNetworkInterfaces(new[] { NetworkInterfaceType.Tunnel, NetworkInterfaceType.Loopback });https://stackoverflow.com/questions/3457119
复制相似问题