微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何获得networking适配器索引?

代码我想强制Windows机器使用特定的networking适配器的所有连接到特定的IP地址。

我打算通过使用ROUTE ADD命令行工具来完成此操作,但是这要求我事先知道networking适配器的索引号 (因为它必须被赋予ROUTE ADD命令)。

问题:如果知道它的名字,如何以编程方式检索networking适配器的索引?

我知道ROUTE PRINT向我显示了我需要的信息(所有networking适配器的索引号),但是也必须有一种以编程方式获取这些信息的方法(C#)?

单声道MVC 2家庭路线不起作用

Laravel 5 – 使用URL查询string的Nginx服务器configuration问题

IP路由SRC不工作

Nginx – 将www.example.com/testredirect到www.example.com:3000/

如何在Nginx上游使用Docker群集DNS /服务名称

请注意,我不喜欢parsing从ROUTE PRINT输出的文本,因为文本格式可能随不同的Windows版本而改变。

如何在yii2中获得像“post / 100”这样的干净url

为什么Docker容器不能相互通信?

如何使我的认(或任何静态)路线永久在Linux上(特别是Fedora 9)?

如何避免在Linux中通过本地堆栈进行路由

到所有接口的组播路由

您可以使用.Net NetworkInterface (及相关)类获取网络适配器的接口索引。

这是一个代码示例:

static void PrintInterfaceIndex(string adapterName) { NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces(); IPGlobalProperties properties = IPGlobalProperties.GetIPGlobalProperties(); Console.WriteLine("IPv4 interface @R_272_4045@ion for {0}.{1}",properties.HostName,properties.DomainName); foreach (NetworkInterface adapter in nics) { if (adapter.Supports(NetworkInterfaceComponent.IPv4) == false) { continue; } if (!adapter.Description.Equals(adapterName,StringComparison.OrdinalIgnoreCase)) { continue; } Console.WriteLine(adapter.Description); IPInterfaceProperties adapterProperties = adapter.GetIPProperties(); IPv4InterfaceProperties p = adapterProperties.GetIPv4Properties(); if (p == null) { Console.WriteLine("No @R_272_4045@ion is available for this interface."); continue; } Console.WriteLine(" Index : {0}",p.Index); } }

然后用这个网卡的名称调用这个函数

PrintInterfaceIndex("your network adapter name");

您还可以使用Win32_NetworkAdapter WMI类获取网络适配器的InterfaceIndex。 Win32_NetworkAdapter类包含一个名为InterfaceIndex的属性

因此,要检索具有给定名称的网络适配器的InterfaceIndex,请使用以下代码

ManagementScope scope = new ManagementScope("\\.\ROOT\cimv2"); ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_NetworkAdapter WHERE Description='<Your Network Adapter name goes here>'"); using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope,query)) { using (ManagementObjectCollection queryCollection = searcher.Get()) { foreach (ManagementObject mo in queryCollection) { Console.WriteLine("InterfaceIndex : {0},name {1}",mo["InterfaceIndex"],mo["Description"]); } } }

如果您不想使用WMI,则还可以将Win32 API函数GetAdaptersInfo与IP_ADAPTER_INFO结构结合使用。 你会在这里找到一个例子pinvoke.net 。

你有没有看过使用C#的system.net.networkinformation接口?

http://msdn.microsoft.com/en-us/library/system.net.networkinformation.networkinterface.getallnetworkinterfaces.aspx

我不熟悉ROUTE ADD,但是理论上你可以结合彼此的信息。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐