RLH*_*RLH 11 .net c# network-programming wlanapi ssid
我正在编写一个小型网络管理工具.为了提取各种WiFi网络的详细信息,我正在调用wlanapi.dll, WlanGetProfile(...)API方法来获取每个可用WiFi网络的配置文件信息.
假设两个本地WiFi网络具有相似的SSID,那么当我向用户提供信息时,如何查询这两个网络上的信息并区分这两个网络?
我正在用C#编写我的应用程序,但是,如果他们能给我我需要的答案,可以提供非特定于代码的通用细节.但是,我将其标记为C#/ .Net,因为如果有办法使用本机.Net库获取此信息,我会欣赏C#代码示例.
正如其他人所说,2个Wi-Fi网络可以具有相同的ESSID(SSID)但不具有相同的BSSID(Mac地址).所以你可以通过MAC地址来区分这两者.
要获取MAC地址以便向用户显示信息,有两种方法.
1. 管理Wifi API
var wlanClient = new WlanClient();
foreach (WlanClient.WlanInterface wlanInterface in wlanClient.Interfaces)
{
Wlan.WlanBssEntry[] wlanBssEntries = wlanInterface.GetNetworkBssList();
foreach (Wlan.WlanBssEntry wlanBssEntry in wlanBssEntries)
{
byte[] macAddr = wlanBssEntry.dot11Bssid;
var macAddrLen = (uint) macAddr.Length;
var str = new string[(int) macAddrLen];
for (int i = 0; i < macAddrLen; i++)
{
str[i] = macAddr[i].ToString("x2");
}
string mac = string.Join("", str);
Console.WriteLine(mac);
}
}
Run Code Online (Sandbox Code Playgroud)
通过Process.Start/Cmd执行一些命令:
using System;
using System.Diagnostics;
class Program
{
static void Main(string[] args)
{
Process proc = new Process();
proc.StartInfo.CreateNoWindow = true;
proc.StartInfo.FileName = "cmd";
proc.StartInfo.Arguments = @"/C ""netsh wlan show networks mode=bssid | findstr BSSID """;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.UseShellExecute = false;
proc.Start();
string output = proc.StandardOutput.ReadToEnd();
proc.WaitForExit();
Console.WriteLine(output);
}
}
Run Code Online (Sandbox Code Playgroud)
您还可以使用第2点的代码执行第三个命令,该命令非常详细.您将不得不操纵字符串以从中提取信息.
netsh wlan show all
Run Code Online (Sandbox Code Playgroud)
它非常有用和详细,这就是您所描述的具有相同SSID的多个Wi-Fi连接的情况下的输出:
捕获输出时,您可以向用户显示所需的信息.
| 归档时间: |
|
| 查看次数: |
828 次 |
| 最近记录: |