Нахождение SSID беспроводной сети с Java - PullRequest
12 голосов
/ 21 марта 2011

Мы делаем проект, написанный на Java (скомпилированный для JRE 1.6), и нам нужна помощь с маленькая, но, по-видимому, сложная особенность: Мы хотим выполнить определенное действие при подключении конкретной беспроводной сети, например, когда подключенный SSID == "myNetworkAtHome" или аналогичный.

После просмотра этого сайта, Google и документации по Java мы подошли немного ближе. Посмотрев на код здесь: http://download.oracle.com/javase/tutorial/networking/nifs/retrieving.html

Кажется, что мы приближались, но это зашло в тупик, все интерфейсы, похоже, подключены к "net0" через "net13" (на моем ноутбуке это). И мы не можем получить SSID из любого интерфейса вообще. Я понимаю, что код в этом примере дает только имена интерфейсов и не подключенные сети, но, похоже, не предлагает способ получения информации о подключенной сети.

Любая помощь по этому вопросу была бы чрезвычайно полезной!

Ответы [ 3 ]

16 голосов
/ 21 марта 2011

Вы не можете получить доступ к этим низкоуровневым деталям сети в Java.Вы можете получить некоторые подробности о сетевом интерфейсе с классом NetworkInterface, но если вы видите в предоставленных методах, никто не связан с сетями Wifi, и никакой способ получить SSID не предоставляется.Как указано ниже, вы должны использовать некоторые собственные функции, вызывая собственную библиотеку с JNI или вызывая инструмент ОС с Runtime.

. Java не предназначена для такого рода задач, трудно реализовать впринцип, независимый от платформы, и любые детали аппаратного уровня не могут управляться в Java в принципе.

То же самое относится и к другим сетям, таким как 3G, GPRS ... приложение не должно знать ни тип соединения, ни егоподробности.Java может управлять только на транспортном (TCP) уровне, а не на сети (IP), а не на канале (3G, Wifi, Ethernet ...), поэтому вы можете управлять только сокетами.

4 голосов
/ 21 марта 2011

Вам придется прибегнуть к решению JNI.Есть что-то доступное на http://sourceforge.net/projects/jwlanscan,, но это работает только для систем Windows.Или вы можете сделать это безобразно и использовать Runtime.getRuntime (). Exec (...) и использовать инструменты командной строки, доступные для вашей ОС (* nix = iwconfig), и прибегнуть к синтаксическому анализу.

3 голосов
/ 18 мая 2015
 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)  );
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...