Сетевой сниффер - поиск локальных сетей в автономном режиме [Java] [дубликат]

Это означает, что указанная переменная не указана ни на что. Я мог бы сгенерировать это так:

SqlConnection connection = null;
connection.Open();

Это вызовет ошибку, потому что, пока я объявил переменную «connection», она не указала ни на что. Когда я пытаюсь вызвать член «Open», для его устранения нет ссылки, и он будет вызывать ошибку.

Чтобы избежать этой ошибки:

  1. Всегда инициализируйте свои объекты, прежде чем пытаться что-либо с ними делать.
  2. Если вы не уверены, что объект имеет значение null, проверьте его с помощью object == null.

Инструмент Resharper JetBrains определит каждое место в вашем коде, которое имеет возможность ошибки нулевой ссылки, позволяя вам ввести нулевую проверку. Эта ошибка является источником ошибок номер один, IMHO.

10
задан Martinnj 21 March 2011 в 14:17
поделиться

3 ответа

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

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

То же самое относится к другим сетям, таким как 3G, GPRS ... приложение не должно знать тип подключения ни его детали. Java может управлять вещами только на уровне транспорта (TCP), а не сети (IP), а не Link (3G, Wi-Fi, Ethernet ...), поэтому вы можете управлять только сокетами.

13
ответ дан David Oliván Ubieto 25 August 2018 в 05:52
поделиться
 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)  );
    }
1
ответ дан Community 25 August 2018 в 05:52
поделиться

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

4
ответ дан Lieven Doclo 25 August 2018 в 05:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: