我編寫了一個 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 阻止,這可能是它不提供正確連接埠狀態的原因之一。