【问题标题】:How to get IP due to corresponding hostname at LAN in android如何在android中的LAN上根据相应的主机名获取IP
【发布时间】:2018-10-22 22:54:21
【问题描述】:

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

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

我尝试使用 nslookup 进行扫描。它在 java 编译器中运行良好,但在 android 中是不可能的 ..

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

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

【问题讨论】:

  • 嗯?为什么要扫描任何东西来查找主机名?我想你很困惑。
  • @SamNikzad 我已经检查过了,由于上述错误,第一个答案不起作用。无法处理第二个答案中使用的 Properties 类,无法解析方法 .put()..
  • @GabeSechan 我尝试的第一件事是使用 InetAddress.getbyName([hostname]) 进行搜索,但无论如何它都不起作用。是的,它适用于 google.com、facebook.com 等网站,但主机名未出现在 DHCP 列表中。所以我正在寻找相反的方向,以携带主机名的方式扫描网络。
  • 为什么会这样? DHCP!= DNS。 getHostByName 进行 DNS 查找。文档说 IP 地址上的 getHostByName 将返回该地址,并验证它是否为 n 个 IP 地址。我认为您需要准确描述您传入的内容以及您期望的输出内容。要么你对术语感到困惑并且没有很好地解释事情,要么你对互联网技术感到困惑并且试图做一些永远不会奏效的事情。

标签: java android ip lan


【解决方案1】:

我已经编写了一个有效的代码(至少出于我的目的)。

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

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

注意事项:

  • 我使用了SyncHttpClient,因为我需要扫描大量地址。我试过 AsyncHttpClient 并没有收到响应。
  • 我尝试过 (InetAddress.isReachable()) 方法来过滤地址,它不起作用,因为它总是返回 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) {
            }
        }
     }
    }
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-23
    • 1970-01-01
    • 2021-03-25
    • 2017-03-09
    • 2015-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多