【问题标题】:Getting a List of computers on a network [duplicate]获取网络上的计算机列表[重复]
【发布时间】:2014-08-18 02:46:10
【问题描述】:

我一直在尝试用 Java 获取我所在网络上所有计算机的名称或 IP。

我尝试用 2 种不同的方式 ping 每个:

Process p = java.lang.Runtime.getRuntime().exec("ping -n 1 " + host);
returnval = p.waitFor();

即使失败,也会为每个地址返回 0。

InetAddress.getByAddress(host).isReachable(timeout);

总是返回 false

计算机出现在资源管理器的 Windows 网络选项卡中。

有没有办法用 Java 检索这些计算机的名称列表以供使用?

【问题讨论】:

  • 这不是 Java 问题。你知道如何运行外部原生程序,所以你的问题纯粹是一个 Windows/Linux/MAC 问题。
  • host 有什么用?
  • 你试过google your question吗?
  • 10.25.144。 (从 0 到 254)。
  • 您是否正在读取进程的响应。 “但是两者都不起作用” 究竟是什么意思?他们是否抛出异常,运行失败不报告任何内容??

标签: java networking host


【解决方案1】:

窗户?

net view

arp -a

最后一个给出 MAC 地址。

【讨论】:

    【解决方案2】:

    只是对上述答案的补充。

    InetAddress.getByName(host).isReachable(timeout); 这将是执行此操作的 java 方式(可跨不同架构移植),但它不起作用,因为它需要一个主机 name。使用 IP 地址时,应使用:

    InetAddress.getByAddress(host).isReachable(timeout);
    

    那是平台无关的方式。

    【讨论】:

    • 抱歉,这个问题有误。
    【解决方案3】:

    扩展 Xabsters 答案我能够通过以下代码实现列表。

    Runtime rt = Runtime.getRuntime();
        try {
            Process p = rt.exec("arp -a");
    
            BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
    
            String s = null;
            while ((s = stdInput.readLine()) != null) {
                s = s.trim();
                if (!s.startsWith("I") && s.length >0)
                System.out.println(s.split(" ")[0]);
            }
    
        } catch (Exception e) {
            e.printStackTrace();
        }
    

    【讨论】:

      猜你喜欢
      • 2011-02-03
      • 1970-01-01
      • 2010-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-15
      • 2013-08-17
      • 1970-01-01
      相关资源
      最近更新 更多