【问题标题】:Get SSID of the wireless network I am connected to with C# .Net on Windows Vista获取我在 Windows Vista 上使用 C# .Net 连接的无线网络的 SSID
【发布时间】:2009-01-10 21:05:50
【问题描述】:

我想知道是否有任何 .Net 类可以让我知道我所连接的无线网络的 SSID。 到目前为止,我只找到了下面链接的库。是我能得到的最好的还是应该使用别的东西? Managed WiFi (http://www.codeplex.com/managedwifi)

利用 WMI 的方法适用于 Windows XP,但它不再适用于 Windows Vista。

【问题讨论】:

    标签: c# windows-vista wireless


    【解决方案1】:

    我使用库解决了。结果是使用提供的类非常容易:

    首先我必须创建一个 WlanClient 对象

    wlan = new WlanClient();
    

    然后我可以使用以下代码获取 PC 连接的 SSID 列表:

    Collection<String> connectedSsids = new Collection<string>();
    
    foreach (WlanClient.WlanInterface wlanInterface in wlan.Interfaces)
    {
       Wlan.Dot11Ssid ssid = wlanInterface.CurrentConnection.wlanAssociationAttributes.dot11Ssid;
       connectedSsids.Add(new String(Encoding.ASCII.GetChars(ssid.SSID,0, (int)ssid.SSIDLength)));
    }
    

    【讨论】:

    • 这不起作用。它需要包括一个我没有找到的程序集!你能指出我正确的方向吗?
    • @MrAsterisco:您需要上面提到的 Managed WiFi (codeplex.com/managedwifi) 库。
    • 未找到 WlanClient。
    【解决方案2】:

    我们使用的是托管 wifi 库,但如果在查询期间网络断开连接,它会引发异常。

    试试:

    var process = new Process
    {
        StartInfo =
        {
        FileName = "netsh.exe",
        Arguments = "wlan show interfaces",
        UseShellExecute = false,
        RedirectStandardOutput = true,
        CreateNoWindow = true
        }
    };
    process.Start();
    
    var output = process.StandardOutput.ReadToEnd();
    var line = output.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).FirstOrDefault(l => l.Contains("SSID") && !l.Contains("BSSID"));
    if (line == null)
    {
        return string.Empty;
    }
    var ssid = line.Split(new[] { ":" }, StringSplitOptions.RemoveEmptyEntries)[1].TrimStart();
    return ssid;
    

    【讨论】:

    • 这可能不适用于所有 Windows 语言,因为 netsh 的输出是本地化的。
    【解决方案3】:

    看起来这会做你想做的事:

    ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\WMI",
    "SELECT * FROM MSNdis_80211_ServiceSetIdentifier");
    
    
    foreach (ManagementObject queryObj in searcher.Get())
    {
        Console.WriteLine("-----------------------------------");
        Console.WriteLine("MSNdis_80211_ServiceSetIdentifier instance");
        Console.WriteLine("-----------------------------------");
    
        if(queryObj["Ndis80211SsId"] == null)
            Console.WriteLine("Ndis80211SsId: {0}",queryObj["Ndis80211SsId"]);
        else
        {
            Byte[] arrNdis80211SsId = (Byte[])
            (queryObj["Ndis80211SsId"]);
            foreach (Byte arrValue in arrNdis80211SsId)
            {
                Console.WriteLine("Ndis80211SsId: {0}", arrValue);
            }
        }
    }
    

    来自http://bytes.com/groups/net-c/657473-wmi-wifi-discovery

    【讨论】:

    • 感谢您的回答。不幸的是,此方法不适用于 Windows Vista。你还有什么想法吗?
    【解决方案4】:
    【解决方案5】:

    (交叉张贴在How to get currently connected wifi SSID in c# using WMI or System.Net.NetworkInformation windows 10?

    我发现了一个可以追溯到 2014 年的相当古老的图书馆:

    Microsoft.WindowsAPICodePack-Core version 1.1.0.2
    

    虽然它不符合.NET Standard,但这个库与我的.NET Core 3.0 应用程序集成,但显然不是跨平台的。

    示例代码:

    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);
    }
    

    【讨论】:

      【解决方案6】:

      您将不得不使用本地 WLAN API。关于它的讨论很长here。显然这就是 Managed Wifi API 使用的,所以如果你对使用 LGPL 代码没有任何限制,你会更容易使用它。

      【讨论】:

      • 我就是这么做的。它表明很容易。谢谢你的回答。
      【解决方案7】:

      我想这样做,并尝试使用 ManagedWifi,正如其他答案中所建议的那样。但这导致了无法解决的异常,如下所示: Issues with using Managed WiFi (NativeWiFi API)

      我通过完全切换到使用SimpleWiFi 并忽略了 ManagedWifi 包解决了这个问题。

      查看源代码,SW 似乎是对 MW 中某些功能的固定重新实现。

      【讨论】:

        猜你喜欢
        • 2011-06-08
        • 2014-05-27
        • 2017-02-02
        • 2020-02-20
        • 1970-01-01
        • 1970-01-01
        • 2018-05-02
        • 1970-01-01
        相关资源
        最近更新 更多