使用Java查找无线网络的SSID

Mar*_*nnj 12 java networking interface adapter ssid

我们正在做的一个项目,在Java中(编译为JRE 1.6)编码,并需要一些帮助一点点,但显然复杂功能:我们想要做某个动作时,一个特定的无线网络连接,例如当连接的SSID =="myNetworkAtHome "或类似的.

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

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

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

关心Martin NJ

Dav*_*eto 18

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

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

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

  • 那太糟糕了......但是感谢你的回答,不妨停止对直接java执行的麻烦,再次感谢. (2认同)

Ali*_*deh 6

 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)  );
    }
Run Code Online (Sandbox Code Playgroud)