[英]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.