¿Cómo obtengo los puntos de acceso wifi disponibles y su potencia de señal en .net?

¿Hay alguna forma de acceder a todos los puntos de acceso WiFi y sus respectivos valores RSSI usando .NET? Sería realmente bueno si pudiera hacerlo sin usar código no administrado o incluso mejor si funcionara tanto en mono como en .NET.

Si es posible, apliqué una muestra de código. Gracias


Aquí hay algunas preguntas similares sobre stackflow que encontré:

– Obtener el SSID de la red inalámbrica a la que estoy conectado con C # .Net en Windows Vista

– Gestionar la conexión de red inalámbrica en C #

– Obtener BSSID (dirección MAC) del punto de acceso inalámbrico desde C #

Es un proyecto de contenedor con código administrado en c # en http://www.codeplex.com/managedwifi

Es compatible con Windows Vista y XP SP2 (o una versión posterior).

Código de muestra:

using NativeWifi; using System; using System.Text; namespace WifiExample { class Program { ///  /// Converts a 802.11 SSID to a string. ///  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("{0}{1}{0}ESSopenWEPfalsenetworkKeyfalse{2}0", profileName, mac, key); wlanIface.SetProfile( Wlan.WlanProfileFlags.AllUser, profileXml, true ); wlanIface.Connect( Wlan.WlanConnectionMode.Profile, Wlan.Dot11BssType.Any, profileName ); } } } } 

Use las API nativas de WiFi, presentes en todos los sistemas Vista y XP SP3. XP SP2 tiene una API diferente con la que puede hacer lo mismo.

Cómo enumerar redes

Cómo obtener la potencia de la señal

Es posible que pueda lograrlo utilizando consultas WMI. Echa un vistazo a este hilo .

Si está utilizando vista wmi no funciona con todos los adaptadores de red, otra alternativa para vista es usar el comando netsh. Eche un vistazo a este artículo del proyecto de código.

Encontré otra manera de hacerlo, aunque cuesta algo de dinero.

Hay una lib de .NET disponible en rawether.net que te permite acceder a los controladores de ethernet.