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