web-dev-qa-db-fra.com

Connexion C # au réseau Wifi avec API Wifi gérée

je me demandais s'il était possible de se connecter à un réseau wifi avec l'API Wifi Managed?

12
binaryBigInt

Fondamentalement, oui.

Vous devriez peut-être passer quelques minutes à chercher. De page codeplex de l'API Wifi gérée:

La bibliothèque utilise l'API Native Wifi, ...

Donc, aller à l'API Wifi native: MSDN

Connectez-vous ou déconnectez-vous d'un réseau sans fil. Voir WlanConnect et WlanDisconnect.

Et de plus, dans le code source de l'API Wifi géré 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);
}

Et l'exemple unique du site Web le fait! exemple

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

Bonne journée!

9
Nicolas R

Il existe des API dans Windows 10 qui peuvent le faire.

Voir classe WiFiAdapter sur MSDN et certains exemple de code sur GitHub

La bonne chose que je vois sur l'API managée est que vous n'avez pas à gérer la création d'un profil XML pour vous connecter à un nouveau réseau. Vous pouvez réellement vous connecter à un réseau avec juste un mot de passe.

3
KyleUp