当前位置: 首页 > 知识库问答 >
问题:

如何在Android系统中获取局域网对应主机名的IP

连鸿
2023-03-14

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

我的工作方式是执行网络扫描,扫描从< code>192.168.1.1到< code>192.168.1.255开始,因此我尝试了< code > inet address . get hostname()、< code > inet address . getcanonical address()但检索的是同一个IP地址。

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

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

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

共有1个答案

解阳荣
2023-03-14

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

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

因此,我正在扫描我的网络,从<code>192.168.1.1向每个地址写入一个http请求。

注意事项:

>

  • 我使用了SyncHttpClient,因为我需要扫描大量地址。我尝试了AsyncHttpClient,但它没有捕获响应。
  • 我尝试了(InetAddress.isReachable())方法来过滤地址,它不起作用,因为它总是返回false
  • 如果不向Request添加至少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) {
            }
        }
     }
    }
    

  •  类似资料:
    • X1.0新增 sp_get_host() 功能: 返回带协议的域名 参数: 无 返回: 类型string 带协议的域名,如http://www.thinkcmf.com

    • 我想通过IP地址获得远程机器/主机名。我找到了很多答案,如nslookup、host、resloveip等。但是我仍然无法从我的目标机器(中央操作系统,ubuntu等)获得主机名似乎需要注册到DNS服务器? 我有一台名为test的机器,使用IP 10.1.27.97 但是我用了上面的方法还是不能得到“测试” 有人能帮我得到主机名表单IP地址吗?

    • 问题内容: 如何从Django模板中获取当前站点的域名?我试着寻找标签和过滤器,但那里什么也没有。 问题答案: 我认为你要访问的是请求上下文,请参阅RequestContext。

    • 我必须取消此系统(附件如下)。我正在获取这个值,但是我不能在服务中,而不是在活动中,以编程方式取消它。 我的问题是: null

    • 问题内容: 我认为ServletContext可能提供一种方法。ServletContext的getAttribute()方法是否提供任何帮助,即是否有需要帮助的属性名称(可能是“ host”,“ port”)。 这样做的原因是,我希望我的应用程序可以在任何部署的地方运行,而且在某一时刻,我必须允许用户单击指向文件服务器上某个位置的链接。因此,我需要按主机和端口进行引用,并且不能使用内部引用。 问

    • 我试过了 但它给了我编译时错误 无法从静态上下文引用非静态方法“get(int)”。 我从observable的调用方法调用这个方法。 我还看到了但它已被弃用。