如何发现在端口x侦听IP地址
问题描述:
我想从我的子网上扫描IP范围。 我想保存将在特定端口上听到的IP地址。我用这个代码:如何发现在端口x侦听IP地址
for (int host = 1; host < 255; host++) {
String ip = networkAddress + host;
Socket socket;
try {
socket = new Socket(ip, port);
System.out.println(ip + " +");
serverList.add(ip);
socket.close();
}
catch (Exception e) {
System.out.println(ip + " -");
}
}
但我的问题是,它需要太多的时间... 有没有更快的方法?
答
使用多线程。由于大部分时间实际上都是等待响应,因此可以安全地创建100个(甚至200个)线程,从而将总时间减少两个数量级。使用Executors
类创建线程池并为每个主机提交一个任务。
请记住,serverList
集合必须是线程安全的。使用shutdown()
和awaitTermination()
对来等待结果。或者使用CompletionService
收集结果。
答
使用new Socket()
(无参数),然后以较短的超时(例如几秒钟)呼叫Socket.connect()
。