我有時會使用 nmap 來檢查我的主機。例如:nmap -sS -p- example.com
但是這個指令永遠不會完成。
所以我把掃描分成小部分:nmap -sS -p 0-999 example.com
(12秒完成)
然後nmap -sS -p 1000-1999 example.com
(14秒完成)等等。
如果使用較寬的部分:nmap -sS -p 0-3999 example.com
需要3分鐘以上才能完成。
30分鐘後還沒nmap -sS -p 0-7999 example.com
完成。
因此:
1000 個連接埠 -> 12 秒
4000 個連接埠 -> 3 分鐘
9000 個連接埠 -> 30 分鐘
有什麼問題?
如何使用 nmap 找到一台主機的開放 TCP 連接埠?
答案1
Nmap 盡最大努力找到準確找到每個連接埠狀態(開啟、關閉或過濾)的速度。計時系統很複雜,並且有一些最壞的情況可能導致掃描速度非常慢。其中一種情況是目標是限速 TCP 連線重設 (RST),這是 Nmap 在連接埠關閉時收到的回應。系統上的大多數連接埠通常是關閉的,為了節省資源或可能阻止掃描嘗試,目標作業系統可能會選擇每秒僅發出一次 RST。
當Nmap 偵測到RST 速率限制時,它必須減慢其探測速度以匹配該速率,否則關閉的連接埠可能會被標記為“已過濾”,因為沒有收到回應,這與防火牆丟棄到該連接埠的流量一致。這種減速行為是逐漸發生的,因此前幾個端口受到的影響不如後面的端口那麼大。此外,它只會影響關閉的端口,因此 1 到 1000 之間的常用端口不太可能導致速度變慢。
這個問題有一個解決方法,但它會帶來準確性的損失。如果您不關心了解過濾連接埠和關閉連接埠之間的區別,您可以使用該--defeat-rst-ratelimit
選項不讓速率限制的 RST 影響 Nmap 的計時。 Nmap 將繼續以適合網路的速率發送,檢測丟棄的資料包並在必要時放慢速度,但非常樂意將關閉的連接埠標記為已過濾。開放連接埠的集合應該完全相同,這就是大多數人想要的。事實上,您甚至可以添加--open
以避免完全列印有關關閉和過濾連接埠的資訊。
答案2
您可以新增-T5
選項以提高掃描速度。根據nmap 時序與效能建議使用-T4
選項:
我建議始終使用-T4。有些人喜歡-T5,儘管它對我來說太激進了。人們有時會指定 -T2,因為他們認為這不太可能導致主機崩潰,或者因為他們認為自己總體上很有禮貌。他們常常沒有意識到禮貌有多慢。他們的掃描時間可能比預設掃描長十倍。使用預設計時選項 (-T3) 時,機器崩潰和頻寬問題很少見,因此我通常建議謹慎的掃描器使用該選項。在減少這些問題方面,省略版本檢測比使用計時值更有效。
答案3
嘗試使用-v
(verbose) 運行 nmap 來幫助您找出速度變慢的原因。
在我自己的一台伺服器上運行nmap -sS -Pn -v -p 1-9999 myserver.com
會在 3000 個連接埠之後的某個位置產生以下結果:
Increasing send delay for (ip address) from 0 to 5 due to max_successful_tryno increase to 4
Increasing send delay for (ip address) from 5 to 10 due to 17 out of 55 dropped probes since last increase.
[...]
Increasing send delay for (ip address) from 160 to 320 due to 11 out of 31 dropped probes since last increase.
SYN Stealth Scan Timing: About 17.08% done; ETC: 13:17 (0:02:30 remaining)
這些訊息似乎不會出現在連接埠 1024 以下。