無論是要解決網絡連接問題還是配置防火墻,第一件事是要檢查系統實際打開了哪些端口或者是應用監聽那些端口。
監聽端口是應用程序監聽的計算機系統的端口。通過ss
,netstat
或lsof
命令查詢系統網絡命名空間,你可以得到的應用程序正在監聽端口名單。
每個監聽端口都可以被防火墻允許或關閉/阻止/過濾/轉發。一般而言,開放端口是一個網絡端口,它接受來自遠程計算機傳入數據包。
例如,如果你正在運行著Web服務器并監聽80
,443
端口,這些端口在防火墻上是對所有人開放。
除非被IPS封鎖,使用瀏覽器將能夠訪問Web服務器的站點。在這種情況下,80
和443
都是開放端口。
開放端口可能會帶來安全風險,因為攻擊者可以使用每個開放端口來進行漏洞攻擊或執行其他類型的攻擊。您應該只打開應用程序所需的端口,關閉未使用的端口。
nmap 掃描開放端口
Nmap是功能強大的網絡掃描工具,可以掃描單個主機和大型網絡。它主要用于安全審核和滲透測試。nmap
是端口掃描的首選工具。
除端口掃描外,nmap
還可以檢測Mac地址,操作系統類型,內核版本等。在本節中,我們僅說明如何使用nmap掃描端口。
nmap的-sT
選項可以掃描TCP端口,-p-
掃描TCP協議的所有端口,即0-65535。如果不使用-p-
,nmap
將僅掃描前1000個端口。
如果你需要掃描UDP端口,請使用-sU
代替-sT
。如果需要更多信息,請訪問nmap手冊頁,并了解此工具的功能。
以下nmap命令示例將會掃描IP地址是10.10.8.8
計算機已打開的端口,確定哪些端口正在監聽來自網絡的TCP/UDP連接。
sudo nmap -sT -p- 10.10.8.8 #tcp
sudo nmap -sU -p- 10.10.8.8 #UDP
Starting Nmap 7.60 ( https://nmap.org ) at 2019-07-09 23:10 CEST
Nmap scan report for 10.10.8.8
Host is up (0.0012s latency).
Not shown: 998 closed ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
MAC Address: 08:00:27:05:49:23 (Oracle VirtualBox virtual NIC)
Nmap done: 1 IP address (1 host up) scanned in 0.41 seconds
輸出顯示,計算機打開的端口包括22
,80
以及8069
端口。
netcat 掃描打開端口
Netcat或nc
是一個命令行工具,可以基于TCP或UDP協議通過網絡連接讀取和寫入數據。
使用netcat命令可以掃描單個端口或端口范圍。默認是掃描TCP協議的端口,要掃描UDP端口,請使用nc
的-u
選項。
你可使用nc
的-z
選項指示僅掃描已打開的端口,并且使用-v
選項用于獲取更多詳細信息。1
如果需要獲得已打開且可成功連接的端口,則可以使用grep命令過濾結果。
例如命令nc -z -v 10.10.8.8 20-80
將會掃描IP地址是10.10.8.8
的遠程計算機,范圍在20-80的TCP端口。
nc -z -v 10.10.8.8 20-80
nc -z -v 10.10.8.8 20-80 2>&1 | grep succeeded #tcp端口
nc -z -v -u 10.10.8.8 20-80 2>&1 | grep succeeded #udp端口
nc: connect to 10.10.8.8 port 20 (tcp) failed: Connection refused
nc: connect to 10.10.8.8 port 21 (tcp) failed: Connection refused
Connection to 10.10.8.8 22 port [tcp/ssh] succeeded!
...
Connection to 10.10.8.8 80 port [tcp/http] succeeded!
Bash 偽設備掃描端口
檢查某個端口是打開還是關閉的另一種方法是使用Bash檢查/dev/tcp/..
或/dev/udp/..
目錄中的偽設備。
在/dev/$PROTOCOL/$HOST/$IP
偽設備運行命令時,Bash將在指定端口打開到指定主機的TCP或UDP連接。
使用偽設備連接到端口時的默認超時時間非常長,因此我們使用timeout
命令在5秒后終止測試命令。如果建立了端口連接,則測試命令將返回true。
以下if..else語句將檢查kernel.org
打開是否打開端口443
,如果建立到kernel.org
端口的連接,則測試命令將返回true。
如果你需要使用檢查指定端口范圍,您也可以使用for循環來達到這一目的。
if timeout 5 bash -c '/dev/null'
then
echo "Port is open"
else
echo "Port is closed"
fi
for PORT in {20..80}; do
timeout 1 bash -c "$PORT &>/dev/null" && echo "port $PORT is open"
done
for循環
port 22 is open
port 80 is open
結論
我們為您展示了幾種可用于掃描開放端口的工具。還有其他工具和方法來檢查打開的端口,例如,您可以使用Python socket
模塊curl
,telnet
或wget
等。
-
Linux
+關注
關注
87文章
11292瀏覽量
209332 -
計算機
+關注
關注
19文章
7488瀏覽量
87854 -
端口
+關注
關注
4文章
963瀏覽量
32052
發布評論請先 登錄
相關推薦
評論