簡體   English   中英

主機在專用網絡上掃描

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM