saw*_*wch 2 .net c# networking interface
在Windows控制面板中,您可以找到显示以下内容的网络接口/连接列表:
在.NET框架中,它们在NetworkInterface类中表示(并通过找到NetworkInterface.GetAllNetworkInterfaces)。
作为参考,假设我正在从以太网接口读取属性-该NetworkInterface.Name属性返回"Ethernet",该NetworkInterface.Description属性返回"Realtek PCIe FE Family Controller"。
但是,该类中的任何内容似乎都无法让我知道它所连接的网络的名称(在本例中为"BELL024")。我将如何获取该字符串?我必须知道接口与哪个网络相关联,而不仅是现有网络的列表。
事实证明,有关每个网络的信息都由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网络。