2009-05-27 10 views

risposta

10

Per C#, dare un'occhiata allo Managed Wifi API, che è un wrapper per il Native Wifi API fornito con Windows XP SP2 e versioni successive.

Non ho testato questo codice, ma guardando il codice di esempio dell'API WiFi gestito, questo dovrebbe elencare gli SSID disponibili.

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

Be ', non ha specificato il sistema operativo in modo, per Linux io suggerisco Wireless Tools per Linux da Jean Tourrilhes (http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html). Il comando iwlist() visualizza molte informazioni sulle reti disponibili. Il codice sorgente è in C. Un altro modo è scrivere il proprio codice in C usando libpcap per catturare i frame beacon ed estrarre SSID da essi (solo in modalità monitor). Non ho ancora testato il mio codice di sniffing, quindi non lo incollerò qui, ma è un lavoro piuttosto semplice.

+0

Ho aggiornato la domanda per specificare 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

sembra che non abbiamo alcun modo, tranne in questo modo –