首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获得默认的NIC连接名

如何获得默认的NIC连接名
EN

Stack Overflow用户
提问于 2010-08-11 09:43:50
回答 6查看 16.8K关注 0票数 5

重要编辑:再次回到这个主题。正如您所说的,不应该有默认的NIC,我正在尝试理解是否有一种方法来检测所有实际连接的NIC。

有我的物理接口的MAC地址有一种编程的方法来获得接口名称/接口状态/等等.

例如,我的XP机器:

设备Realtek RTL8139系列PCI快速以太网网卡MAC XXXX-XXXX-XXXX

我只知道XXXX-XXXX-XXXX

通过这个设备,我使用“局域网连接”连接(与所有信息相关的网关,子网,.)

所以我在寻找XXXX-XXXX-XXXX和局域网连接之间的链接。

希望现在一切都清楚了。

谢谢大家!抱歉耽搁了..。+1投给所有人,为了耐心!

老问题

大家好,我想通过使用命令netsh来更改“本地连接”的IP。

我的问题是,是否有一种编程方法来获得默认连接名称(即,确切地说是“本地连接”)?

谢谢

编辑:我不需要所有连接名称的列表,而只需要默认的连接名称。访问注册表时,我会得到列表,而且默认的标记似乎是*。不幸的是,在控制台上打印它们我得到了10种不同的“局部连接”,比如.

代码语言:javascript
复制
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,您将得到类似于后面列表的内容,不幸的是,它似乎不是预期的输出

代码语言:javascript
复制
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
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-09-08 17:01:57

这是一种肮脏的方法,因为它可以通过合并LINQ等来进行优化。

代码语言:javascript
复制
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()的结果来调整结果

票数 2
EN

Stack Overflow用户

发布于 2010-08-11 16:36:57

正如其他人所提到的,Windows中没有“默认”NIC适配器。所使用的网卡是根据目标网络(地址)和度量来选择的。

例如,如果您有两个NIC和两个不同的网络:

代码语言:javascript
复制
  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:拼写。

希望这能有所帮助。

票数 5
EN

Stack Overflow用户

发布于 2010-08-11 10:06:18

代码语言:javascript
复制
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;

或者更优雅的解决方案:

代码语言:javascript
复制
.Where(i => !(
    new[] { NetworkInterfaceType.Loopback, NetworkInterfaceType.Tunnel }
    .Contains(i.NetworkInterfaceType)))

或者如果您想在LINQ中练习:

代码语言:javascript
复制
static IEnumerable<NetworkInterface> GetAllNetworkInterfaces(IEnumerable<NetworkInterfaceType> excludeTypes)
{
    var all = NetworkInterface.GetAllNetworkInterfaces();
    var exclude = all.Where(i => excludeTypes.Contains(i.NetworkInterfaceType));
    return all.Except(exclude);
}

用法:

代码语言:javascript
复制
var nic = GetAllNetworkInterfaces(new[] { NetworkInterfaceType.Tunnel, NetworkInterfaceType.Loopback });
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3457119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档