局域网扫描获取主机的有关信息

怎样获取局域网中的主机的有关信息哪?网上搜了一下,基本上是通过 ping 命令完成,感觉这个办法有点不怎么好。

感觉用JPCAP是个不错的选择,它是基于数据链路层的编程,很方便实现很多东西。这个问题先放在一边,下次再说,

虽然使用 ping 不怎么好,还是记个标志。

   废话不说啦,贴上关键代码:

    class PingIp extends Thread {

  public String ip; // IP

  public PingIp(String ip) {
   this.ip = ip;
  }

  public void run() {
   try {
    Process p = Runtime.getRuntime().exec(
      "ping " + ip + " -w 300 -n 1");
    InputStreamReader isr = new InputStreamReader(p.getInputStream());
    LineNumberReader input = new LineNumberReader(isr);
    // 读取结果行
    for (int i = 1; i < 7; i++)
     input.readLine();
    String line = input.readLine();
    if (!line.equals("Request timed out.")) {
                   
     InetAddress host = InetAddress.getByName(ip);
     String hostName = host.getHostName();
     
     System.out.println("您所在网段中存在的主机:"+" "+ "IP:" + " " + ip + "  "
       + "HostName:" + " " + hostName + " ");
     
    }
    if (line.length() < 17
      || line.substring(8, 17).equals("timed out")) {
     ping.put(ip, "超时返回");
    } else {
     ping.put(ip, "null");//已被使用
    }
     
    // 线程结束
    threadCount -= 1;
    } catch (IOException e) {
   }
  } 

不知哪位还有更好的办法实现此类问题,希望探讨!!!

你可能感兴趣的:(局域网扫描获取主机的有关信息)