[英]Finding SSID of a wireless network with Java
我们正在做一个用 Java 编码的项目(为 JRE 1.6 编译),需要一些帮助,但有一个明显复杂的功能:我们想在连接特定无线网络时执行某些操作,例如当连接的 SSID=="myNetworkAtHome "或类似的。
在浏览了这个站点、谷歌和 Java 文档后,我们已经接近了一点。 查看这里的代码后: http : //download.oracle.com/javase/tutorial/networking/nifs/retrieving.html
看起来我们已经接近了,但它遇到了死胡同,所有接口似乎都通过“net13”连接到“net0”(在我的笔记本电脑上。)而且我们根本无法从任何接口中获取 SSID . 我确实意识到示例中的代码只给出了接口名称而不是连接的网络,但它似乎没有提供获取连接网络信息的方法。
对此的任何帮助都会非常有帮助!
您无法在 Java 中访问网络的这种低级详细信息。 您可以使用NetworkInterface
类获取网络接口的一些详细信息,但是如果您在提供的方法中看到,没有人与 Wifi 网络相关,也没有提供任何获取 SSID 的方法。 如下所述,您应该通过使用 JNI 调用本机库或使用Runtime
调用操作系统工具来使用一些本机功能。
Java 不是为了做那种事情而设计的,很难以独立于平台的方式实现,任何硬件级别的细节原则上都不能在 Java 中管理。
同样适用于其他网络,如 3G、GPRS……应用程序不应该知道连接类型或其详细信息。 Java 只能管理传输 (TCP) 级别的事物,而不是网络 (IP) 而非链路(3G、Wifi、以太网...),因此您只能管理套接字。
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 (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<ssids.size();i++)
{
System.out.println("SSID name == "+ssids.get(i)+" and its signal == "+signals.get(i) );
}
您将不得不求助于 JNI 解决方案。 在http://sourceforge.net/projects/jwlanscan 上有一些可用的东西,但它只适用于 Windows 系统。 或者,您可以采用丑陋的方式并使用 Runtime.getRuntime().exec(...) 并使用适用于您的操作系统的命令行工具 (*nix = iwconfig) 并求助于解析。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.