在C#中查找接口索引

如何在C#中获取连接的interace索引?

如果索引不是标准术语,我的意思是与接口关联的数字,例如当您使用命令“netsh int ipv4 show int”按左侧的索引列出您的连接时。 它也用于“路由添加[网关]掩码[索引]如果[接口索引]”。

我知道接口的名称和描述,所以使用NetworkInterface.GetAllNetworkInterfaces()然后在那里找到合适的接口是相当直接的。 从那里,我找不到索引。 我认为ID可能是相同的,但它具有“{XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}”forms的值,而不是小整数值。

我想你想要的

 myInterface.GetIPProperties().GetIPv4Properties().Index; 

如在

 var interfaces = NetworkInterface.GetAllNetworkInterfaces(); foreach(var @interface in interfaces) { var ipv4Properties = @interface.GetIPProperties().GetIPv4Properties(); if (ipv4Properties != null) Console.WriteLine(ipv4Properties.Index); } 

请注意,如果没有可用于该接口的IPv4信息,则GetIPv4Properties()可以返回null

这个msdn页面显示了一个可能有用的示例。

所有网络接口都有一个GUID,它唯一地将它们分开,并用于Win环境中的个人操作,即ID。

idx不是直接分配给NIC,而是由Windows管理系统用作设置详细信息的用户友好方式。

这里有一段代码,显示了如何访问可能包含信息的ManagementObjectSearcher,您必须解析结果(而不是只选择下面的名称)

 internal static IEnumerable GetConnectedCardNames() { string query = String.Format(@"SELECT * FROM Win32_NetworkAdapter"); var searcher = new ManagementObjectSearcher { Query = new ObjectQuery(query) }; try { log.Debug("Trying to select network adapters"); var adapterObjects = searcher.Get(); var names = (from ManagementObject o in adapterObjects select o["Name"]) .Cast(); return names; } catch (Exception ex) { log.Debug("Failed to get needed names, see Exception log for details"); log.Fatal(ex); throw; } } 

你在谈论网络适配器绑定顺序吗? 如果是这样,通常存储在此注册表项中:

HKEY_LOCAL_MACHINE \系统\ CurrentControlSet \服务\ TCPIP \联动