Linux系統使用 netstat 查看和檢查系統端口占用情況
在 Linux 使用過程中,如果需要了解當前系統開放了哪些端口,及這些端口的關聯進程和用戶,可以通過 netstat 命令進行查詢。
netstat 命令各參數說明如下:
-t:指明顯示 TCP 端口
-u:指明顯示 UDP 端口
-l:僅顯示監聽套接字
-p:顯示進程標識符和程序名稱,每一個套接字/端口都屬于一個程序。
-n:不進行 DNS 輪詢,顯示 IP (可以加速操作)
常用的 netstat 命令組合
netstat -na
該命令將顯示所有活動的網絡連接。
同時,還可以結合使用 grep、wc、sort 等 linux 命令來分析系統中連接情況,查看連接數狀況,判斷服務器是否被攻擊。
netstat -an | grep :80 | sort
顯示所有 80 端口的網絡連接并排序。這里的 80 端口是 http 端口,所以可以用來監控 web 服務。如果看到同一個 IP 有大量連接,則判定該 IP 疑似存在單點流量攻擊行為。
netstat -n -p|grep SYN_REC | wc -l
統計當前服務器有多少個活動的 SYNC_REC 連接數。正常來說這個值很小(小于 5)。
說明:當有 DDos 攻擊或時,該值可能會非常高。但有些并發很高的服務器,該值也確實很高,因此該很高并不能說明一定是被攻擊所致。
netstat -n -p | grep SYN_REC | sort -u
列出所有連接過的 IP 地址。
netstat -n -p | grep SYN_REC | awk '{print $5}' | awk -F: '{print $1}'
列出所有發送 SYN_REC 連接節點的 IP 地址。
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
計算每個主機連接到本機的連接數。
netstat -anp |grep 'tcp|udp' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
列出所有連接到本機的 UDP 或者 TCP 連接的 IP 數量。
netstat -ntu | grep ESTAB | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr
檢查 ESTABLISHED 連接并且列出每個 IP 地址的連接數量。
netstat -plan|grep :80|awk {'print $5'}|cut -d: -f 1|sort|uniq -c|sort -nk 1
列出所有連接到本機 80 端口的 IP 地址及其連接數。80 端口一般是用來處理 HTTP 網頁請求。
netstat -antp | awk '$4 ~ /:80$/ {print $4" "$5}' | awk '{print $2}'|awk -F : {'print $1'} | uniq -c | sort -nr | head -n 10
顯示連接到 80 端口連接數排名前 10 的 IP,并顯示每個 IP 的連接數。如果看到同一個 IP 有大量連接,則判定該 IP 疑似存在單點流量攻擊行為。
如何停止端口占用
可以通過如下步驟來停止端口占用:
1.查找端口占用的進程
使用如下命令來查看(以查看9000端口為例):netstat -antp | grep 9000
示例輸出:
2.可以看到 PID 為 1070 的進程占用了這個端口。
3.停止相應進程即可。