
我目前正在使用地圖在我的程式的一部分中映射本地網絡,我想知道在所有連接埠上執行不同的連接埠掃描需要多長時間?
用於檢查連接埠是否開啟(如果發送資料包進行檢查)的逾時和平均資料包大小是多少?
我希望能夠在圖表中表示這些結果,並可能測試這些結果。
我確實知道,一般來說,UDP 連接埠掃描比 TCP 需要更長的時間,因為它是無連線的,並且使用了更多的資源。
答案1
可能涉及許多因素,包括連結速度、雙工、最小資料包大小、往返時間、目標主機的延遲、是否涉及入侵偵測/預防系統以及特定掃描的往返次數類型要求、連結的繁忙程度等。
因此,我們假設掃描器機器和目標位於同一千兆位元乙太網路上,我們將估計掃描 65536 個連接埠所需的理論最短時間。 GigE 始終是全雙工的,最小幀大小為 64 字節,在計算強制幀間間隙後,最大幀速率為每秒 1,488,000 個最小大小幀。 TCP Syns、Syn-Acks、(空)Ack、Fins 和 Rsts 都是最小尺寸的幀。在我現在使用的 GigE 上,RTT 為 0.3 毫秒(300 微秒),因此我們假設目標主機在相同的 0.3 毫秒延遲內以 Syn-Ack 或 Rst 回复 Syns。讓我們進一步假設它會回復其中一個;不會有任何“過濾”端口,我們只需等待某個任意超時即可。
因此,將 TCP Syns 傳送到所有連接埠所需的時間為:65,536 / 1,488,000 = 44ms
由於GigE 是全雙工的,因此第一個回應將在後面的Syns 發出時開始傳入,但我們必須在最後一個Syn 發送和最後一個回復之間等待1 個RTT,因此添加1 個RTT,即0.3ms,對於總共44.3毫秒。
即使您的掃描必須進行兩次往返,所有網路流量仍然可以在不到一秒的時間內完成。
請注意,如果目標主機沒有回覆某些連接埠的 Syns,您必須在自己的演算法中自行選擇設定「無回應」逾時的時間。但您可以將其視為 RTT。假設您想要使用 10 秒的逾時。您仍然可以在 44 毫秒內發送所有 Syn,但您可能需要在上次發送 Syn 後等待 10 秒,以確定您不太可能從該連接埠獲得回應。因此,即使在所有 2^16 連接埠均無響應且逾時 10 秒的情況下,總時間也將為 44 毫秒 + 10 秒 = 10.044 秒。