2009-05-27 4 views

Antwort

10

Für C#, werfen Sie einen Blick auf die Managed Wifi API, die ein Wrapper für die Native Wifi API mit Windows XP SP2 und höher ist.

Ich habe diesen Code nicht getestet, aber mit Blick auf den Managed Wifi API-Beispielcode sollte dies die verfügbaren SSIDs auflisten.

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

Nun, man hat nicht angegeben OS so, für Linux werde ich Wireless Tools für Linux von Jean Tourrilhes (http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Tools.html) vorschlagen. Der Befehl iwlist() zeigt viele Informationen über die verfügbaren Netzwerke an. Der Quellcode ist in C. Eine andere Möglichkeit besteht darin, Ihren eigenen Code in C zu schreiben, indem Sie libpcap verwenden, um die Beacon-Frames zu erfassen und SSID daraus zu extrahieren (nur im Überwachungsmodus). Ich habe meinen Schnüffelcode noch nicht getestet, daher werde ich ihn hier nicht einfügen, aber es ist ziemlich einfach.

+0

Ich habe die Frage aktualisiert, um Windows XP + anzugeben. –

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

scheint, dass wir keinen Weg haben, außer auf diese Weise –