获取网络接口所连接的网络的名称

saw*_*wch 2 .net c# networking interface

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

网络接口

在.NET框架中,它们在NetworkInterface类中表示(并通过找到NetworkInterface.GetAllNetworkInterfaces)。

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

但是,该类中的任何内容似乎都无法让我知道它所连接的网络的名称(在本例中为"BELL024")。我将如何获取该字符串?我必须知道接口与哪个网络相关联,而不仅是现有网络的列表。

saw*_*wch 5

事实证明,有关每个网络的信息都由Windows作为“网络配置文件”存储,并存储其名称和其他信息(如是否公开)。用户可以在控制面板中更改名称,但就我而言,这不是问题。

Microsoft 的Windows API代码包包含获取网络配置文件所需的API。由于它包含了很多我不需要的膨胀,因此可以在此处找到包装Windows API的最基本代码。

然后可以找到网络配置文件的集合,如下所示:

//Get the networks that are currently connected to
var networks = NetworkListManager.GetNetworks(NetworkConnectivityLevels.Connected);
Run Code Online (Sandbox Code Playgroud)

集合中的每个对象代表一个网络配置文件,并包含一个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());
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

示例图片

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

  • 提示:Guid.Parse 可以轻松地将 `NetworkInterface.Id` 字符串转换为与 NetworkConnection.AdapterId 相同的类型,然后使用 Guid.Equals(...) (3认同)