代码之家  ›  专栏  ›  技术社区  ›  Funkydiddykong

获取网络上的计算机列表[重复]

  •  2
  • Funkydiddykong  · 技术社区  · 11 年前

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

    我用两种不同的方式尝试了每种方式:

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

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

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

    始终返回false

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

    有什么方法可以用Java检索这些计算机的名称列表吗?

    3 回复  |  直到 11 年前
        1
  •  3
  •   Xabster    11 年前

    窗户?

    net view
    

    arp -a
    

    最后一个给出MAC地址。

        2
  •  1
  •   Serge Ballesta    11 年前

    只是对上述答案的补充。

    InetAddress.getByName(host).isReachable(timeout); 这将是java实现这一点的方法(跨不同体系结构可移植),但由于它需要一个主机,所以不起作用 名称 。使用IP地址时,应使用:

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

    这是平台独立的方式。

        3
  •  1
  •   Funkydiddykong    11 年前

    通过扩展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();
        }