[英]Host scanning on a private network
我正在尝试列出本地WiFi网络上的所有可用设备。 为此,我使用简单的ICMP回显技术来检查设备是否已连接。 问题是扫描整个子网需要花费时间。 我在后续扫描之间使用了7毫秒的等待时间。 我的问题是,我是否可以为此目的使用Java多线程,即每个线程将独立工作以扫描不同的段? 会有链路层约束吗? 谢谢你的帮助!
不久前,我写了一些东西,它将扫描局域网中的所有可用设备,然后扫描每个端口以查看其是否也打开。 在这里可用。
由于时间太长,请病假解释我是怎么做到的。
首先像这样创建一个类:
public class AddressWorker implements Runnable
{
private String address;
public AddressWorker(String address, Vector<String> validAddresses) { this.address = address; }
public void run()
{
//Your existing code that uses ICMP to listen for a device
//if the address responds add it to valid addresses
}
}
由于runnable的功能类似于线程,因此我们将照此使用它们。
Vector<String> allRespondedAddress = new Vector(256, 256);
ExecutorService addressExecutor = Executors.newCachedThreadPool();
while (list all ip addresses)
{
addressExecutor.execute(new AddressWorker(nextAddress, allRespondedAddresses));
}
addressExecutor.awaitTermination(some time);
CachedThreadPool将作为线程运行添加到它的每个可运行对象。 它将自动分配和优化资源(例如,如果一个线程在等待,而另一个线程在等待工作,它将在其他线程等待时将可工作线程向前移动)。 在我的CPU上,它将在大约30秒内扫描子网上的所有256个地址以及每个地址的所有65536个端口。 我觉得我的完整代码太久了,无法在此处发布,但是所有内容都非常易于访问,并评论了我发布的链接。 我不是网络专家,所以我担心我在链接层约束方面无法提供帮助,因为我不知道它们是什么。
我希望这能使您朝正确的方向看。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.