為什麼 nmap -p和 nmap -A 掃描顯示不同的結果?

為什麼 nmap -p和 nmap -A 掃描顯示不同的結果?

我編寫了一個 C# 應用程序,用於偵聽連接埠 789。跑步

netstat -an | find "789"

TCP    0.0.0.0:789            0.0.0.0:0              LISTENING

當我nmap -A -vv ip在不同的 Linux 機器(但相同的子網路)上運行時,它僅報告主機上打開的其他連接埠(即 mysql、vnc 等),但不報告我的應用程式開啟的連接埠。

然而,當我跑步時nmap -p 789 ip我得到:

PORT     STATE   SERVICE
789/tcp  open  unknown

為什麼兩次 nmap 掃描之間存在差異?我可以做些什麼來確保 nmap 在進行完整掃描時檢測到開放連接埠?

答案1

預設情況下,nmap 僅掃描「常見」連接埠(我認為每個協定有 1000 個最常見的連接埠)。由於 789 不是常用端口,因此未找到。如果你這樣做

nmap -A -vv -p- ip

它應該掃描連接埠 1-65535。

這是 nmap 文檔,說明預設掃描哪些連接埠: http://nmap.org/book/man-port-specation.html

答案2

唯一的方法是修改 nmap 的服務文件,但不建議這樣做。此-A選項運行高級選項,包括服務檢測、作業系統檢測、追蹤路由等 - 它不會掃描整個範圍。如果要掃描所有 65k 端口,請使用選項-p-。除此之外,您只需使用 指定連接埠即可-p 789。您最好的選擇可能是建立可以執行此操作的別名nmap -p 789,以節省時間。

如果您確實需要更改服務檔案(預設為 /usr/local/share/nmap/nmap-services ),請找到讀取的行unknown 789/tcp 0.000075並將其替換為您的程式名稱,並將數字放在末尾0.9,所以它是nmap 包括頂部連接埠。不過,別名會好得多。

答案3

我不知道。它檢測到它為“打開”,這就是你想要的,對嗎?所以聽。為什麼用 -A 找不到它,我不確定。

編輯 - 這是來自舊文檔,可能不適用於您的版本。運行man nmap並讓我們知道您擁有什麼版本。

從文檔中,我看到:

“預設情況是掃描 1 到 1024 之間的所有連接埠以及 nmap 附帶的服務文件中列出的任何連接埠。”

因此,即使您的服務文件中沒有 789,也應該掃描它(因為它被標記為“未知”,我確信它不是。)

因此,我不知道。檢查你的 man 檔案中的 nmap 版本,也許它使用 -A 掃描哪些連接埠的行為與我找到的文件不同?

這種情況不太可能發生,但可能值得研究一下 - 差異可能在於 Linux 電腦上的使用者 ID。 NMap 的特權使用者和非特權使用者有不同的預設掃描類型。具有 root 權限的使用者可以進行 TCP SYN 掃描,沒有 root 權限的使用者將預設使用 TCP connect() 。

答案4

nmap-A是一個激​​進的命令,因為它會在後台運行多個腳本,這就是它會給你更多結果的主要原因。它將版本檢測-sV與作業系統檢測-O(大寫字母 O 而不是數字零)和其他發現腳本結合在一起。 Nmap 預設情況下,如果沒有給出具體連接埠號,將掃描前 1000 個最常見的連接埠(這些連接埠在nmap 服務您可以編輯的文件)。可以向激進命令提供您想要掃描的端口,這樣您就不會獲得除了您想要掃描的端口(TCP 789)之外的其他端口的結果

nmap -p 789 -A TARGET_IP_ADDRESS_OR_IP_RANGE

而如果您只想檢查連接埠(在您的情況下為 789)是否開啟/關閉/過濾

nmap -p 789 TARGET_IP_ADDRESS_OR_IP_RANGE

由於-A執行多個腳本並且聲音很大(就網路流量而言),因此很容易被 IDS 標記,並且很可能會被防火牆或 IPS 阻止,這可能是它不提供正確連接埠狀態的原因之一。

相關內容