如果存在两个具有类似SSID的WiFi网络,您如何区分代码中的两个?

RLH*_*RLH 11 .net c# network-programming wlanapi ssid

我正在编写一个小型网络管理工具.为了提取各种WiFi网络的详细信息,我正在调用wlanapi.dll, WlanGetProfile(...)API方法来获取每个可用WiFi网络的配置文件信息.

假设两个本地WiFi网络具有相似的SSID,那么当我向用户提供信息时,如何查询这两个网络上的信息并区分这两个网络?

我正在用C#编写我的应用程序,但是,如果他们能给我我需要的答案,可以提供非特定于代码的通用细节.但是,我将其标记为C#/ .Net,因为如果有办法使用本机.Net库获取此信息,我会欣赏C#代码示例.

Liq*_*ore 6

正如其他人所说,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)
  1. 的Process.Start /加利福尼亚

通过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连接的情况下的输出:

无线上网

捕获输出时,您可以向用户显示所需的信息.


小智 5

检测具有相同 SSID 的少数网络没有问题,因为它们具有不同的 MAC。

然而,看起来无法连接到所选的一个,因为连接时无法指定 MAC。