【问题标题】:C# Connect to Wifi Network with Managed Wifi APIC# 使用托管 Wifi API 连接到 Wifi 网络
【发布时间】:2023-03-30 19:45:01
【问题描述】:

我想知道是否可以使用 Managed Wifi API 连接到 wifi 网络?

【问题讨论】:

    标签: c# networking wifi


    【解决方案1】:

    基本上是的。

    也许您应该花几分钟时间进行搜索。来自Managed Wifi API codeplex page:

    该库使用本机 Wifi API,...

    所以转到 Native Wifi API:MSDN

    连接或断开无线网络。请参阅 WlanConnect 和 WlanDisconnect。

    此外,在 Managed Wifi API WlanApi.cs 的源代码中:

    /// <summary>
    /// Requests a connection (association) to the specified wireless network.
    /// </summary>
    /// <remarks>
    /// The method returns immediately. Progress is reported through the <see cref="WlanNotification"/> event.
    /// </remarks>
    public void Connect(Wlan.WlanConnectionMode connectionMode, Wlan.Dot11BssType bssType, string profile)
    {
        Wlan.WlanConnectionParameters connectionParams = new Wlan.WlanConnectionParameters();
        connectionParams.wlanConnectionMode = connectionMode;
        connectionParams.profile = profile;
        connectionParams.dot11BssType = bssType;
        connectionParams.flags = 0;
        Connect(connectionParams);
    }
    

    网站的独特样本正在这样做! Sample

    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 );
            foreach ( Wlan.WlanAvailableNetwork network in networks )
            {
                if ( network.dot11DefaultCipherAlgorithm == Wlan.Dot11CipherAlgorithm.WEP )
                {
                    Console.WriteLine( "Found WEP network with SSID {0}.", GetStringForSSID(network.dot11Ssid));
                }
            }
    
            // Retrieves XML configurations of existing profiles.
            // This can assist you in constructing your own XML configuration
            // (that is, it will give you an example to follow).
            foreach ( Wlan.WlanProfileInfo profileInfo in wlanIface.GetProfiles() )
            {
                string name = profileInfo.profileName; // this is typically the network's SSID
                string xml = wlanIface.GetProfileXml( profileInfo.profileName );
            }
    
            // Connects to a known network with WEP security
            string profileName = "Cheesecake"; // this is also the SSID
            string mac = "52544131303235572D454137443638";
            string key = "hello";
            string profileXml = string.Format("<?xml version=\"1.0\"?><WLANProfile xmlns=\"http://www.microsoft.com/networking/WLAN/profile/v1\"><name>{0}</name><SSIDConfig><SSID><hex>{1}</hex><name>{0}</name></SSID></SSIDConfig><connectionType>ESS</connectionType><MSM><security><authEncryption><authentication>open</authentication><encryption>WEP</encryption><useOneX>false</useOneX></authEncryption><sharedKey><keyType>networkKey</keyType><protected>false</protected><keyMaterial>{2}</keyMaterial></sharedKey><keyIndex>0</keyIndex></security></MSM></WLANProfile>", profileName, mac, key);
            wlanIface.SetProfile( Wlan.WlanProfileFlags.AllUser, profileXml, true );
            wlanIface.Connect( Wlan.WlanConnectionMode.Profile, Wlan.Dot11BssType.Any, profileName );
        }
    }
    

    祝你有美好的一天!

    【讨论】:

    • 鉴于我的机器有多个 wifi 键盘,是否可以指定我可以使用哪个网络接口进行连接?
    【解决方案2】:

    Windows 10 中有 API 可以做到这一点。

    WiFiAdapter class on MSDN和一些sample code on GitHub

    我看到托管 API 的好处是您不必创建 XML 配置文件来连接到新网络。实际上,您只需输入密码即可连接到网络。

    【讨论】:

    • 感谢 iot 示例的链接。
    猜你喜欢
    • 1970-01-01
    • 2011-09-08
    • 2022-12-21
    • 2015-05-20
    • 2021-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多