2009-01-10 30 views
23

Me gustaría saber si hay alguna clase .Net que me permita conocer el SSID de la red inalámbrica a la que estoy conectado. Hasta ahora solo he encontrado la biblioteca vinculada a continuación. ¿Es lo mejor que puedo obtener o debería usar algo más? Managed WiFi (http://www.codeplex.com/managedwifi)Obtener SSID de la red inalámbrica a la que estoy conectado con C# .Net en Windows Vista

El método que explota WMI funciona para Windows XP, pero es que no funciona más con Windows Vista.

Respuesta

22

Resolví usar la biblioteca. Dio lugar a ser bastante fácil trabajar con las clases establecidas:

primero tenía que crear un objeto WlanClient

wlan = new WlanClient(); 

Y entonces puede obtener la lista de los SSID el PC está conectado a este código :

Collection<String> connectedSsids = new Collection<string>(); 

     foreach (WlanClient.WlanInterface wlanInterface in wlan.Interfaces) 
     { 
      Wlan.Dot11Ssid ssid = wlanInterface.CurrentConnection.wlanAssociationAttributes.dot11Ssid; 
      connectedSsids.Add(new String(Encoding.ASCII.GetChars(ssid.SSID,0, (int)ssid.SSIDLength))); 
     } 
+0

Esto no funciona. ¡Requiere incluir un ensamblaje que no logré encontrar! ¿Puedes señalarme la dirección correcta? – MrAsterisco

+4

@MrAsterisco: necesita la biblioteca Managed WiFi (http://www.codeplex.com/managedwifi) mencionada anteriormente. – habakuk

2

Parece que esto va a hacer lo que quiere:

ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\WMI", 
"SELECT * FROM MSNdis_80211_ServiceSetIdentifier"); 


foreach (ManagementObject queryObj in searcher.Get()) 
{ 
    Console.WriteLine("-----------------------------------"); 
    Console.WriteLine("MSNdis_80211_ServiceSetIdentifier instance"); 
    Console.WriteLine("-----------------------------------"); 

    if(queryObj["Ndis80211SsId"] == null) 
     Console.WriteLine("Ndis80211SsId: {0}",queryObj["Ndis80211SsId"]); 
    else 
    { 
     Byte[] arrNdis80211SsId = (Byte[]) 
     (queryObj["Ndis80211SsId"]); 
     foreach (Byte arrValue in arrNdis80211SsId) 
     { 
      Console.WriteLine("Ndis80211SsId: {0}", arrValue); 
     } 
    } 
} 

de http://bytes.com/groups/net-c/657473-wmi-wifi-discovery

+1

Gracias por la respuesta. Lamentablemente, este método no funciona con Windows Vista. ¿Tienes alguna otra idea? – mariosangiorgio

0

Usted va a tener que utilizar la API de WLAN nativa. Hay una larga discusión al respecto here. Aparentemente, esto es lo que usa Managed WiFi API, por lo que le será más fácil usarlo si no tiene restricciones para usar el código LGPL.

+0

Eso es lo que hice. Reveló que era fácil. Gracias por tu respuesta. – mariosangiorgio

-3

verificación de la página web http://wwww.daedaltech.com que dan una DLL con la que podemos encontrar t El SSID y la dirección MAC

+0

La página proporcionada no existe –

2

Estábamos utilizando la biblioteca wifi administrada, pero arroja excepciones si la red se desconecta durante una consulta.

Probar:

 var process = new Process 
         { 
          StartInfo = 
          { 
           FileName = "netsh.exe", 
           Arguments = "wlan show interfaces", 
           UseShellExecute = false, 
           RedirectStandardOutput = true, 
           CreateNoWindow = true 
          } 
         }; 
     process.Start(); 

     var output = process.StandardOutput.ReadToEnd(); 
     var line = output.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries) 
         .FirstOrDefault(l => l.Contains("SSID") && !l.Contains("BSSID")); 
     if (line == null) 
     { 
      return string.Empty; 
     } 
     var ssid = line.Split(new[] { ":" }, StringSplitOptions.RemoveEmptyEntries)[1].TrimStart(); 
     return ssid; 
Cuestiones relacionadas