Comment puis-je obtenir les APs wifi disponibles et leur puissance de signal in.net Je ne sais pas.

est-il possible d'accéder à tous les points D'accès WiFi et à leurs valeurs RSSI respectives en utilisant .NET? Ce serait vraiment bien si je pouvais le faire sans utiliser de code non géré ou encore mieux si cela fonctionnait en mono aussi bien que .NET.

si c'est possible, j'appricierais un échantillon de code. Merci


voici quelques questions similaires que j'ai trouvées:

- Obtenir le SSID du sans fil réseau auquel je suis connecté avec C# .Net sur Windows Vista

- la Gestion de la connexion réseau sans fil en C#

- Obtenir BSSID (adresse MAC) du point d'accès sans fil à partir de C#

26
demandé sur Community 2009-01-30 21:15:54

5 réponses

c'est un projet d'enrubannage avec du code géré en c# à http://www.codeplex.com/managedwifi

il prend en charge Windows Vista et XP SP2 (ou une version plus récente).

code échantillon:

using NativeWifi;
using System;
using System.Text;

namespace WifiExample
{
    class Program
    {
        /// <summary>
        /// Converts a 802.11 SSID to a string.
        /// </summary>
        static string GetStringForSSID(Wlan.Dot11Ssid ssid)
        {
            return Encoding.ASCII.GetString( ssid.SSID, 0, (int) ssid.SSIDLength );
        }

        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 );
            }
        }
    }
}
17
répondu Jirapong 2009-01-31 04:07:02

utilise des API Wifi natives, présentes sur tous les systèmes Vista et XP SP3. XP SP2 a une API différente avec laquelle vous pouvez faire la même chose.

Comment énumérer les réseaux

Comment obtenir l'intensité du signal

3
répondu Nick 2009-01-31 02:12:03

vous pourrait être en mesure de le réaliser en utilisant des requêtes WMI. Jetez un oeil à ce thread .

0
répondu andynormancx 2009-01-30 18:20:52

si vous utilisez vista wmi ne fonctionne pas avec tous les adaptateurs réseau, une autre alternative pour vista est d'utiliser la commande netsh. Jetez un oeil à cet article de coprojet.

0
répondu Lee Treveil 2009-01-30 18:28:00

j'ai trouvé un autre moyen de le faire, bien que cela coûte de l'argent.

il y a un .NET lib disponible à rawether.net qui vous permet d'accéder aux pilotes ethernet.

-2
répondu LDomagala 2009-02-01 15:33:24