gpt4 book ai didi

c# - 如何获取网络适配器索引?

转载 作者:可可西里 更新时间:2023-11-01 12:35:28 26 4
gpt4 key购买 nike

从代码中我想强制一台 Windows 机器使用一个特定的网络适配器来连接到一个特定的 IP 地址。

我计划使用 ROUTE ADD 命令行工具来实现,但这需要我提前知道网络适配器的索引号(因为它必须提供给 ROUTE ADD 命令) .

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

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

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

最佳答案

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

这是一个代码示例:

static void PrintInterfaceIndex(string adapterName)
{
NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();
IPGlobalProperties properties = IPGlobalProperties.GetIPGlobalProperties();

Console.WriteLine("IPv4 interface information 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 information is available for this interface.");
continue;
}
Console.WriteLine(" Index : {0}", p.Index);
}
}

然后只需使用您的网络适配器名称调用此函数即可:

PrintInterfaceIndex("your network adapter name");

您还可以获得网络适配器的InterfaceIndex通过使用 Win32_NetworkAdapter WMI 类。 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# - 如何获取网络适配器索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11144919/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com