android 局域网内对应主机名如何获取IP

How to get IP due to corresponding hostname at LAN in android

我正在寻找一种方法来获取 LAN 中已知主机名的 IP 地址。

我的工作方式是执行网络扫描,扫描从 192.168.1.1 开始到 192.168.1.255 ,所以我尝试了 InetAddress.getHostName(),InetAddress.getCanonicalAddress() 但检索相同的 IP 地址。

我试过使用 nslookup 进行扫描。它在 java 编译器中完美运行,但在 android ..

中是不可能的

由于编译标题时出现错误,我无法测试 dnsjava 库:NoClassDefFoundError,文件 dnsjava-2.1.7.jar 已添加到 libs 目录。

有什么帮助吗? *对不起我的英语。

我写了一个有效的代码(至少对我来说是这样)。

我已经对我的微控制器 (ESP8266-NodeMCU) 进行了编程,以写回携带 JSON 对象的 HTML 响应。

所以我通过向从 192.168.1.1192.168.1.255 的每个地址写入一个 http 请求来扫描我的网络。

备注:

  • 我使用了SyncHttpClient,因为我需要扫描大量地址。我试过 AsyncHttpClient 但没有收到响应。
  • 我试过 (InetAddress.isReachable()) 方法来过滤地址,它不起作用,因为它总是 return false.
  • 如果不向请求添加至少 1 个查询参数,我将无法创建 HttpRequest。

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