使用Java查找无线网络的SSID

我们正在做一个用Java编写的项目(为JRE 1.6编译)并且需要一些帮助但有一点但显然很复杂的特性:我们想要在连接特定无线网络时执行某项操作,例如当连接的SSID ==“myNetworkAtHome “或类似的。

浏览了这个网站,谷歌和Java文档,我们已经走得更近了。 看完这里的代码后: http : //download.oracle.com/javase/tutorial/networking/nifs/retrieving.html

看起来我们越来越接近它但是它遇到了一个deadend,所有接口似乎都连接到“net0”到“net13”(在我的笔记本电脑上)。而且我们无法从任何界面获取SSID 。 我确实意识到示例中的代码仅提供接口名称而不是连接的网络,但它似乎没有提供获取连接的网络信息的方法。

任何有关这方面的帮助都会非常有帮助!

关心Martin NJ

您无法在Java中访问网络的这种低级细节。 您可以通过NetworkInterface类获取网络接口的一些详细信息,但是如果您看到提供的方法,则没有人与Wifi网络相关,也没有提供任何方式来获取SSID。 如下所述,您应该通过使用JNI调用本机库或使用Runtime调用OS工具来使用某些本机function。

Java不是为了那样做而设计的,难以以独立于平台的方式实现,并且原则上无法用Java管理任何硬件级细节。

同样适用于3G,GPRS等其他网络……应用程序不应该知道连接类型及其细节。 Java只能管理传输(TCP)级别的东西,而不能管理网络(IP)而不是链接(3G,Wifi,以太网……),因此您只能管理套接字。

您将不得不求助于JNI解决方案。 http://sourceforge.net/projects/jwlanscan上提供了一些内容,但这仅适用于Windows系统。 或者你可以用丑陋的方式做到并使用Runtime.getRuntime()。exec(…)并使用可用于你的操作系统的命令行工具(* nix = iwconfig)并求助于解析。

  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