2009-05-27 18 views

Respuesta

10

Para C#, eche un vistazo a Managed Wifi API, que es un contenedor para el Native Wifi API provisto con Windows XP SP2 y posterior.

No he probado este código, pero al ver el código de muestra de Managed Wifi API, esto debería enumerar los SSID disponibles.

WlanClient client = new WlanClient(); 
foreach (WlanClient.WlanInterface wlanIface in client.Interfaces) 
{ 
    // Lists all available networks 
    Wlan.WlanAvailableNetwork[] networks = wlanIface.GetAvailableNetworkList(0); 
    foreach (Wlan.WlanAvailableNetwork network in networks) 
    {      
     Console.WriteLine("Found network with SSID {0}.", GetStringForSSID(network.dot11Ssid)); 
    } 
} 

static string GetStringForSSID(Wlan.Dot11Ssid ssid) 
{ 
    return Encoding.ASCII.GetString(ssid.SSID, 0, (int) ssid.SSIDLength); 
} 
0

Bueno, no se especificó el sistema operativo por lo que, para Linux Sugeriré Herramientas inalámbricas para Linux por Jean Tourrilhes (http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html). El comando iwlist() muestra mucha información sobre las redes disponibles. El código fuente está en C. Otra forma es escribir su propio código en C usando libpcap para capturar las tramas de baliza y extraer SSID de ellas (solo en modo monitor). Todavía no he probado mi código de olfateo, así que no lo pegaré aquí, pero es un trabajo bastante simple.

+0

He actualizado la pregunta para especificar Windows XP +. –

1
ArrayList<String>ssids=new ArrayList<String>(); 
ArrayList<String>signals=new ArrayList<String>(); 
ProcessBuilder builder = new ProcessBuilder(
     "cmd.exe", "/c", "netsh wlan show all"); 
builder.redirectErrorStream(true); 
Process p = builder.start(); 
BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream())); 
String line; 
while (true) { 
    line = r.readLine(); 
    if (line.contains("SSID")||line.contains("Signal")){ 
     if(!line.contains("BSSID")) 
      if(line.contains("SSID")&&!line.contains("name")&&!line.contains("SSIDs")) 
      { 
       line=line.substring(8); 
       ssids.add(line); 

      } 
      if(line.contains("Signal")) 
      { 
       line=line.substring(30); 
       signals.add(line); 

      } 

      if(signals.size()==7) 
      { 
       break; 
      } 

    } 

} 
for (int i=1;i<ssids.size();i++) 
{ 
    System.out.println("SSID name == "+ssids.get(i)+" and its signal == "+signals.get(i) ); 
} 
+0

parece que no tenemos ninguna manera, excepto de esta manera –

Cuestiones relacionadas