C# 使用NetworkInterface.GetAllNetworkInterfaces()时,如何确定主适配器?

C# 使用NetworkInterface.GetAllNetworkInterfaces()时,如何确定主适配器?,c#,windows,adapter,ip-address,C#,Windows,Adapter,Ip Address,在C#程序中,我使用以下方法获取所有适配器的信息: NetworkInterface.GetAllNetworkInterfaces() 但是,如何确定哪一个是主适配器?我原本以为它是索引号最低的适配器,但事实并非如此。如果我理解正确,您是否在寻找用于建立连接的活动适配器? 我这样做: string currentAdapter = ""; foreach (NetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces()) {

在C#程序中,我使用以下方法获取所有适配器的信息: NetworkInterface.GetAllNetworkInterfaces()


但是,如何确定哪一个是主适配器?我原本以为它是索引号最低的适配器,但事实并非如此。

如果我理解正确,您是否在寻找用于建立连接的活动适配器? 我这样做:

string currentAdapter = "";

foreach (NetworkInterface ni in NetworkInterface.GetAllNetworkInterfaces()) {
    if (ni.OperationalStatus == OperationalStatus.Up
        && ni.NetworkInterfaceType != NetworkInterfaceType.Tunnel
        && ni.NetworkInterfaceType != NetworkInterfaceType.Loopback) {
        currentAdapter = (ni.Name);
    }
}

根据您的说法,“主适配器”是什么?为IP启用的每个适配器都可能参与通信。您可能要查找的是接口连接度量(由WMI类在
IPConnectionMetric
中公开)。据我所知,
System.Net.NetworkInformation
无法检索这些信息。@Jeroenmoster谢谢你的回复。例如,假设您有两个适配器,它们都连接到internet。如果启动Internet Explorer,它如何选择要使用的适配器?它不选择,这是在IE之下的级别。IE只需向DNS解析器请求站点的IP地址,然后开始发送数据包。这些数据包最终使用的适配器取决于路由表(
route print
,来自命令行),而路由表又从目标网络和接口度量中派生出来。(IE实际上有一些“设置internet”功能和代理覆盖,因此这并不完全准确,但这是不做任何特殊工作的网络应用程序的一般情况。)一个应用程序可能最终使用多个适配器。