Как получить IP за счет соответствующего имени хоста в локальной сети в Android - PullRequest
0 голосов
/ 13 мая 2018

Я ищу способ получить IP-адрес известного имени хоста в локальной сети.

Я работал так, чтобы выполнить сканирование сети, сканирование начинается с 192.168.1.1 до 192.168.1.255, поэтому яЯ пробовал InetAddress.getHostName(), InetAddress.getCanonicalAddress(), но получает тот же IP-адрес.

Я попытался выполнить сканирование с помощью nslookup.это прекрасно работало на java-компиляторе, но в андроиде это невозможно ...

Я не смог протестировать библиотеку dnsjava из-за ошибок при компиляции заголовка: NoClassDefFoundError, файл dnsjava-2.1.7.jar добавлен в каталог libs.

любая помощь?* извините за мой английский.

1 Ответ

0 голосов
/ 31 мая 2018

Я написал работающий код (по крайней мере, для моих целей).

Я запрограммировал свой микроконтроллер (ESP8266-NodeMCU) для записи ответа HTML, содержащего объект JSON.

Поэтому я сканирую свою сеть, записывая http-запрос на каждый адрес, начиная с 192.168.1.1 до 192.168.1.255.

Примечания:

  • Я использовал SyncHttpClient так как мне нужно сканировать большое количество адресов.Я попытался AsyncHttpClient, и он не уловил ответ.
  • Я пытался (InetAddress.isReachable()) метод для фильтрации адресов, он не работает, так как он всегда возвращает false.
  • Я не мог сделать HttpRequest, не добавив в запрос хотя бы 1 параметр запроса.

    boolean found = false;
    
    void getIPAddress()  {
    
      for (int i = 1; i < 255; i++) {
        if (!found) {
            String tryIP = subnet + String.valueOf(i);
            Log.d(TAG, "Trying: " + tryIP);
            final String finalIP = tryIP;
    
            try {
    
                    SyncHttpClient client = new SyncHttpClient();
                    RequestParams params = new RequestParams();
                    params.put("check", "1");
    
                    client.get("http://" + finalIP , params, new JsonHttpResponseHandler() {
    
    
    
                        @Override
                        public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
                            try {
    
                                JSONObject jo = response;
                                String key = jo.getString("controller");
                                Log.d(TAG, "Success : " + response + " and key is : " + key);
    
                                if (key.equals("esplight")) {
    
                                    Log.d(TAG, "Found the ESP! Its IP is :" + finalIP);
    
                                    found = true;
    
    
                                }
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
    
                        }
    
                        @Override
                        public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse) {
    
                            Log.d(TAG, "trying to connect failed ");
    
                        }
                    });
    
    
              } catch (Exception e) {
            }
        }
     }
    }
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...