Trovare SSID di una rete wireless con Java

Stiamo facendo un progetto codificato in Java (compilato per JRE 1.6) e abbiamo bisogno di aiuto con una piccola ma apparentemente complicata funzionalità: Vogliamo fare una certa azione quando una rete wireless specifica è connessa ad esempio quando l’SSID connesso == “myNetworkAtHome ” o simili.

Dopo aver consultato questo sito, google e la documentazione Java ci siamo avvicinati un po ‘di più. Dopo aver visto il codice qui: http://download.oracle.com/javase/tutorial/networking/nifs/retrieving.html

Sembra che ci stessimo avvicinando ma colpisce un deadend, tutte le interfacce sembrano essere collegate a “net0” tramite “net13” (sul mio portatile). E non siamo in grado di ottenere l’SSID da nessuna interfaccia . Mi rendo conto che il codice nell’esempio fornisce solo i nomi delle interfacce e non le reti connesse, ma non sembra offrire un modo per recuperare le informazioni di rete connesse.

Qualsiasi aiuto su questo sarebbe estremamente utile!

Saluti Martin NJ

Non è ansible accedere a questi dettagli di basso livello della rete in Java. È ansible ottenere alcuni dettagli dell’interfaccia di rete con la class NetworkInterface , ma se si vedono i metodi forniti, nessuno è correlato alle reti Wifi e non viene fornito alcun modo per ottenere l’SSID. Come indicato di seguito, è necessario utilizzare alcune funzionalità native richiamando una libreria nativa con JNI o ​​chiamando uno strumento SO con Runtime .

Java non è progettato per fare questo genere di cose, è difficile da implementare in un modo indipendente dalla piattaforma e qualsiasi dettaglio a livello di hardware non può essere gestito in Java per principio.

Lo stesso vale per altre reti come 3G, GPRS … l’applicazione non dovrebbe essere a conoscenza del tipo di connessione e dei suoi dettagli. Java può gestire solo cose a livello di trasporto (TCP), non la rete (IP) non il collegamento (3G, WiFi, Ethernet …), quindi puoi gestire solo socket.

Dovrai ricorrere a una soluzione JNI. C’è qualcosa disponibile su http://sourceforge.net/projects/jwlanscan , ma funziona solo per i sistemi Windows. Oppure puoi farlo in modo brutto e utilizzare Runtime.getRuntime (). Exec (…) e utilizzare gli strumenti da riga di comando disponibili per il tuo sistema operativo (* nix = iwconfig) e ricorrere all’analisi.

  ArrayListssids=new ArrayList(); ArrayListsignals=new ArrayList(); 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 (r.read()!=-1) { 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=0;i