怎样获取局域网中的主机的有关信息哪?网上搜了一下,基本上是通过 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) {
}
}
不知哪位还有更好的办法实现此类问题,希望探讨!!!