获取网络接口连接到

时间:2017-01-30 19:28:59

标签: c# .net networking interface

在Windows控制面板中,您可以找到显示以下内容的网络接口/连接列表:

network interfaces

在.NET框架中,这些代表在NetworkInterface类中(通过NetworkInterface.GetAllNetworkInterfaces找到)。

作为参考,假设我正在从以太网接口读取属性 - NetworkInterface.Name属性返回"Ethernet"NetworkInterface.Description属性返回"Realtek PCIe FE Family Controller"

但是,班级中没有任何内容似乎能够让我知道它所连接的网络的名称(在这种情况下为"BELL024")。如何获得该字符串?我必须知道接口所关联的网络,而不仅仅是存在的网络列表。

3 个答案:

答案 0 :(得分:3)

事实证明,每个网络的信息都存储为一个网络资料'通过Windows,存储它的名称和其他信息,例如它是否公开。用户可以在控制面板中更改名称,但在我看来这不是问题。

Microsoft的 Windows API代码包包含获取网络配置文件所需的API。因为它包含了我不需要的大量膨胀,所以用于封装Windows API can be found here的最小代码。

然后可以找到网络配置文件的集合:

//Get the networks that are currently connected to
var networks = NetworkListManager.GetNetworks(NetworkConnectivityLevels.Connected);

集合中的每个对象都代表一个网络配置文件,并包含NetworkConnection个对象的集合。每个NetworkConnection对象似乎都是有关接口与基础网络的连接的信息。

foreach(Network network in networks)
{
    //Name property corresponds to the name I originally asked about
    Console.WriteLine("[" + network.Name + "]");

    Console.WriteLine("\t[NetworkConnections]");
    foreach(NetworkConnection conn in network.Connections)
    {
        //Print network interface's GUID
        Console.WriteLine("\t\t" + conn.AdapterId.ToString());
    }
}

NetworkConnection.AdapterId属性与NetworkInterface.Id属性知道的网络接口GUID相同。

因此,您可以通过检查其中一个网络的连接是否与接口具有相同的ID来确定接口所连接的网络。请注意,它们的表示方式不同,因此您需要做更多的工作:

example image

在上例中,我的Wi-Fi和以太网接口都连接到BELL024网络。

答案 1 :(得分:0)

您可以使用WMI查询您的网络名称。您可以将此代码用作示例:

ManagementScope oMs = new ManagementScope();  
ObjectQuery oQuery =  
    new ObjectQuery("Select * From Win32_NetworkAdapter");  
ManagementObjectSearcher oSearcher = new ManagementObjectSearcher(oMs, oQuery);  
ManagementObjectCollection oReturnCollection = oSearcher.Get();  
foreach (ManagementObject oReturn in oReturnCollection) 
{
    if (oReturn.Properties["NetConnectionID"].Value != null)  
        {
            Console.WriteLine("Name : " + oReturn.Properties["NetConnectionID"].Value);
        }
} 

答案 2 :(得分:0)

在Windows 8和Windows 2012及更高版本上,您可以从 root / StandardCimv2 命名空间查询WMI类 MSFT_NetConnectionProfile

将其转换为C#并不难。

Get-WmiObject -Namespace root/StandardCimv2 -Class MSFT_NetConnectionProfile | Format-Table InterfaceAlias, Name