如何获取dotnet核心中当前连接的WiFi SSID和信号强度?

cdh*_*nna 6 .net c# .net-core

我知道该帖子获取Windows Vista上与C#.Net连接的无线网络的SSID, 它描述了如何在C#中获取ssid。但是,dotnet核心不支持该库。有没有办法获取点网核心中当前连接的wifi适配器的ssid和信号强度?我尝试过使用NetworkInterface命名空间(System.Net.NetworkInformation),这似乎至少给了我一些有关网络的诊断信息,但是它绝对不包含ssid。你们有什么感想?支持(还)吗?

我正在使用的代码如下。它没有给我我所需要的。我主要是用它来与调试器一起探索的。

var interfaces = NetworkInterface.GetAllNetworkInterfaces();
var connected = interfaces
     .Where(i => i.OperationalStatus == OperationalStatus.Up)
     .Where(i => i.NetworkInterfaceType == NetworkInterfaceType.Wireless80211)
     .ToList();

var wifi = connected[0];
var props = wifi.GetIPProperties();
var addr = wifi.GetPhysicalAddress();
var stats = wifi.GetIPStatistics();
Run Code Online (Sandbox Code Playgroud)

多谢你们。

Car*_*eld 2

我不知道您使用的是哪个 .NET Core 版本,但来自 MSFT 的以下 NuGet 包与我的 .NET Core 3.0 应用程序集成:

Microsoft.WindowsAPICodePack-Core version 1.1.0.2
Run Code Online (Sandbox Code Playgroud)

尽管该库相当旧(可以追溯到 2014 年),并且不符合 .NET 标准。显然这不是跨平台的,只能在 Windows 上运行。它没有提供您需要的信息,但也许它是真正解决方案的有用提示?

示例代码:

var networks = NetworkListManager.GetNetworks(NetworkConnectivityLevels.Connected);            
foreach (var network in networks) { 
    sConnected = ((network.IsConnected == true) ? " (connected)" : " (disconnected)");
    Console.WriteLine("Network : " + network.Name + " - Category : " + network.Category.ToString() + sConnected);
}
Run Code Online (Sandbox Code Playgroud)

信号强度

通过使用以下 PowerShell 要点,netsh您将获得信号强度:

(netsh wlan show interfaces) -Match '^\s+Signal' -Replace '^\s+Signal\s+:\s+',''
Run Code Online (Sandbox Code Playgroud)

经过进一步谷歌搜索后,我偶然发现了 ManagedWlan 项目的 Codeplex 存档:

https://archive.codeplex.com/?p=managementwifi

它提供了与 Windows 内核 API 的广泛互操作。我相信它还可以让您检索信号强度。我已将提供的 MIT 许可源代码迁移到 GitHub 存储库: https: //github.com/cveld/ManagedWifi

它针对 .NET Core 3.0 进行编译,但显然不是跨平台的。