在Windows控制面板中,您可以找到显示以下内容的网络接口/连接列表:
在.NET框架中,这些代表在NetworkInterface
类中(通过NetworkInterface.GetAllNetworkInterfaces
找到)。
作为参考,假设我正在从以太网接口读取属性 - NetworkInterface.Name
属性返回"Ethernet"
,NetworkInterface.Description
属性返回"Realtek PCIe FE Family Controller"
。
但是,班级中没有任何内容似乎能够让我知道它所连接的网络的名称(在这种情况下为"BELL024"
)。如何获得该字符串?我必须知道接口所关联的网络,而不仅仅是存在的网络列表。
答案 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来确定接口所连接的网络。请注意,它们的表示方式不同,因此您需要做更多的工作:
在上例中,我的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