zoukankan      html  css  js  c++  java
  • 2019-9-30-dotnet-枚举当前设备wifi热点

    title author date CreateTime categories
    dotnet 枚举当前设备wifi热点
    lindexi
    2019-09-30 14:42:18 +0800
    2019-9-30 14:19:6 +0800
    dotnet

    在 dotnet 程序没有现有的方法可以列举当前设备的无线网卡找到的 WIFI 热点,需要写一点代码才能使用

    最简单的方法是通过命令行的方法,在命令行输入下面代码可以显示计算机上可见的网络列表

    netsh wlan show networks

    在我设备上运行可以找到我附近的 WIFI 热点

    SSID 1 : Lindexi
        Network type            : 结构
        身份验证                : WPA2 - 个人
        加密                    : CCMP
    
    SSID 2 : Lvyi
        Network type            : 结构
        身份验证                : WPA2 - 个人
        加密                    : CCMP
    
    SSID 3 : 职业技术学院
        Network type            : 结构
        身份验证                : 开放式
        加密                    : 无

    也就是通过命令行方式调用,然后解析命令行就可以列举设备能连接的 WIFI 热点

    另一个方法是通过本机代码

    网上找到调用 wlanapi.dll 的方法,调用了方法可以拿到当前设备能访问的 WIFI 列表

    这里的代码都是调用 win32 方法,我将代码放在 github 请复制 WlanApi.csInterop.cs 到你的项目,然后使用下面代码就可以显示当前能连接的网络

            static void Main(string[] args)
            {
                WlanClient client = new WlanClient();
                foreach (WlanClient.WlanInterface wlanIface in client.Interfaces)
                {
                    // Lists all networks with WEP security
                    Wlan.WlanAvailableNetwork[] networks = wlanIface.GetAvailableNetworkList(0);
    
                    if (networks.Length > 0)
                    {
                        Console.WriteLine($"找到{networks.Length}热点");
                        foreach (Wlan.WlanAvailableNetwork network in networks)
                        {
                            Console.WriteLine($"WIFI {GetStringForSSID(network.dot11Ssid)}.");
                        }
    
                        Console.WriteLine();
                    }
                }
            }
    
            /// <summary>
            /// Converts a 802.11 SSID to a string.
            /// </summary>
            private static string GetStringForSSID(Wlan.Dot11Ssid ssid)
            {
                return Encoding.UTF8.GetString(ssid.SSID, 0, (int) ssid.SSIDLength);
            }

    当然,复制代码的方法是很逗比的,早就有大佬做出了 NuGet 库,请安装 SimpleWifi 这个库,然后使用下面代码就可以输出

            static void Main(string[] args)
            {
                var wlanClient = new WlanClient();
                foreach (var wlanClientInterface in wlanClient.Interfaces)
                {
                    foreach (var wlanAvailableNetwork in wlanClientInterface.GetAvailableNetworkList(WlanGetAvailableNetworkFlags.IncludeAllAdhocProfiles))
                    {
                        Console.WriteLine($"WIFI {GetStringForSSID(wlanAvailableNetwork.dot11Ssid)}.");
                    }
                }
            }
    
            /// <summary>
            /// Converts a 802.11 SSID to a string.
            /// </summary>
            private static string GetStringForSSID(Dot11Ssid ssid)
            {
                return Encoding.UTF8.GetString(ssid.SSID, 0, (int) ssid.SSIDLength);
            }

    使用库的代码也放在 github 欢迎小伙伴下载

    是不是看的代码和复制大佬写的代码的差不多,其实这个库的代码基本和刚才复制代码的一样,如果想要使用刚才复制代码的库,可以安装 managedwifi 库,此时的显示可以访问的周围的网络的代码和刚才复制代码的相同

    修改的代码也放在 github 欢迎小伙伴下载

    在 UWP 有框架的方法访问 WIFI 请看 WiFiAdapter Class (Windows.Devices.WiFi) - Windows UWP applications 使用方法请看 Windows-universal-samples/Samples/WiFiScan 但是 Win32 如果不打包 UWP 不能调上面方法

    查询已连接 Wi-Fi 的密码(入门和进阶两种方法) - walterlv

    博客园博客只做备份,博客发布就不再更新,如果想看最新博客,请到 https://blog.lindexi.com/

    知识共享许可协议
    本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名[林德熙](http://blog.csdn.net/lindexi_gd)(包含链接:http://blog.csdn.net/lindexi_gd ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我[联系](mailto:lindexi_gd@163.com)。
  • 相关阅读:
    Java RunTime Environment (JRE) or Java Development Kit (JDK) must be available in order to run Eclipse. ......
    UVA 1597 Searching the Web
    UVA 1596 Bug Hunt
    UVA 230 Borrowers
    UVA 221 Urban Elevations
    UVA 814 The Letter Carrier's Rounds
    UVA 207 PGA Tour Prize Money
    UVA 1592 Database
    UVA 540 Team Queue
    UVA 12096 The SetStack Computer
  • 原文地址:https://www.cnblogs.com/lindexi/p/12086155.html
Copyright © 2011-2022 走看看