2009-01-30 13 views
25

¿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.¿Cómo obtengo los puntos de acceso wifi disponibles y su potencia de señal en .net?

Si es posible, solicitaría una muestra de código. Gracias


Aquí hay algunas preguntas StackOverflow similar que encontré:

- Get SSID of the wireless network I am connected to with C# .Net on Windows Vista

- Managing wireless network connection in C#

- Get BSSID (MAC address) of wireless access point from C#

Respuesta

17

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

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

código de ejemplo:

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

Gracias por esto. Pero no funciona para mí. Estoy usando Windows 8.1 y obtengo esta excepción "Se produjo una excepción no controlada del tipo 'System.ComponentModel.Win32Exception' en ManagedWifi. dll ". ¿Alguna idea? –

+0

También estoy obteniendo este error en una de mis máquinas aunque lo estoy ejecutando en Windows 10 y VS 2015. ¿Alguna pista? ¿Pudiste solucionarlo? – Apoorv

0

Usted puede ser capaz de lograrlo usando consultas WMI. Eche un vistazo a este thread.

0

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 this codeproject article.

+1

thx para el enlace. el problema con netsh es que no me da toda la información que necesito (rssi) y es un poco problemático a veces la intensidad de la señal – LDomagala

-2

he encontrado otra manera de hacerlo, a pesar de que cuesta dinero.

Hay una .NET lib disponible en rawether.net que le permite obtener los controladores de ethernet.

Cuestiones relacionadas