test,read IP
import java.io.*;
import java.net.InetAddress;
import java.util.*;
public class ReadIp {
static public HashMap ping; // ping 后的結果集
public HashMap getPing() { // 用來得到ping后的結果集
return ping;
}
// 當前線程的數量, 防止過多線程摧毀電腦
static int threadCount = 0;
public ReadIp() {
ping = new HashMap();
}
public void Ping(String ip) throws Exception {
// 最多30個線程
while (threadCount > 30)
Thread.sleep(50);
threadCount += 1;
PingIp p = new PingIp(ip);
p.start();
}
public void PingAll() throws Exception {
// 首先得到本機的IP,得到網段
//InetAddress host = InetAddress.getLocalHost();
//InetAddress host = InetAddress.getByName(null);
InetAddress host = InetAddress.getByName("127.0.0.1");
String hostAddress = host.getHostAddress();
int k = 0;
k = hostAddress.lastIndexOf(".");
String ss = hostAddress.substring(0, k + 1);
for (int i = 1; i <= 255; i++) { // 對所有局域網Ip
String iip = ss + i;
Ping(iip);
}
// 等著所有Ping結束
while (threadCount > 0)
Thread.sleep(50);
}
public static void main(String[] args) throws Exception {
ReadIp ip = new ReadIp();
ip.PingAll();
Set entries = ping.entrySet();
Iterator iter = entries.iterator();
String k;
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
String key = (String) entry.getKey();
String value = (String) entry.getValue();
if (value.equals("true"))
System.out.println(key + "-->" + value);
}
}
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 ir = new InputStreamReader(p.getInputStream());
LineNumberReader input = new LineNumberReader(ir);
// 讀取結果行
for (int i = 1; i < 7; i++)
input.readLine();
String line = input.readLine();
if (line.length() < 17
|| line.substring(8, 17).equals("timed out"))
ping.put(ip, "false");
else
ping.put(ip, "true");
// 線程結束
threadCount -= 1;
} catch (IOException e) {
}
}
}
}