使用Java查找无线网络的SSID

时间:2011-03-21 13:17:29

标签: java networking interface adapter ssid

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

浏览了这个网站后,google和Java文档我们的距离越来越近了。 看完代码后: http://download.oracle.com/javase/tutorial/networking/nifs/retrieving.html

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

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

3 个答案:

答案 0 :(得分:16)

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

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

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

答案 1 :(得分:4)

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

答案 2 :(得分:3)

 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)  );
    }