哪個端口被哪個服務占用?有多少個開放端口?本文介紹如何掃描 linux 系統或任何遠程系統上開放的端口。
無論您是使用 Linux 作為服務器還是桌面環境,了解開放的端口或正在使用的端口在各種情況下都會有所幫助。
例如,如果您正在運行基于 Apache 或 Ngnix 的 Web 服務器,則使用的端口應該是 80 或 443。檢查端口將確認這一點。同樣,您可以檢查 SMTP 或 SSH 或其他一些服務正在使用哪個端口。在將端口分配給新服務時,了解哪些端口正在使用是很有必要的。
您還可以檢查是否有端口被用于安全入侵。
在 Linux 中有多種檢查端口的方法。我將在本文中分享我最喜歡的兩種方法。
方法一:使用 lsof 命令查看當前登錄的 Linux 系統中打開的端口
如果您直接或通過 SSH 登錄到系統,則可以使用 lsof 命令檢查其端口。
sudo lsof -i -P -n
lsof 命令用于查找用戶使用的文件和進程。這里用到的選項是:
- -i:如果沒有指定IP地址,這個選項選擇列出所有網絡文件
- -P:禁止將端口號轉換為端口名稱, 如 3306 轉為 MySQL
- -n:禁止IP轉換為hostname,缺省是不加上-n參數
然而,上面命令也向我們展示了許多計算機實際上并未監聽的額外端口。
您可以將此命令的輸出通過管道傳輸到 grep 命令并匹配模式“LISTEN”,如下所示:
sudo lsof -i -P -n | grep LISTEN
這樣只會顯示我們的計算機正在監聽的端口以及哪個服務正在使用所述開放端口。
方法二:使用 netcat 命令檢查任何服務器上的端口
nc (Netcat) 是一個命令行實用程序,它使用 TCP 和 UDP 協議通過網絡在計算機之間讀取和寫入數據。
下面給出了 nc 命令的語法:
nc [options] host port
這個實用程序有一個 -z 標志。使用時,它將使 nc 掃描偵聽守護程序而不實際向端口發送任何數據。
將此與 -v 標志結合使用,啟用詳細模式,您可以獲得詳細的輸出。
以下是使用 nc 命令掃描系統開放端口的命令:
nc -z -v <IP-ADDRESS> 1-65535 2>&1 | grep -v 'Connection refused'
將 IP-ADDRESS 替換為您正在檢查端口的 Linux 系統的 IP 地址。可以是本機ip 127.0.0.1,也可以是遠程機器的ip地址。
至于我為什么選擇值 1 到 65535,那是因為端口范圍從 1 開始,到 65535 結束。
最后,將輸出通過管道傳遞給 grep 命令。使用 -v 選項,它會排除任何返回包括 “Connection refused” 的行。
這將顯示計算機上打開的所有端口,這些端口可由網絡上的另一臺計算機訪問(在防火墻允許的情況下)。
結論
在這兩種方法中,我更喜歡 lsof 命令。它比 nc 命令更快。但是,您需要登錄系統并擁有 sudo 訪問權限。換句話說,如果您正在管理系統,則 lsof 是更合適的選擇。
nc 命令具有無需登錄即可掃描端口的靈活性,但當掃描遠程主機時因為需要網絡交互會很慢, 特別是面臨超時請求時,可使用 -q secs 參數設置超時時間。