nestat:打印網絡連接、路由表、接口統計信息、偽裝連接和多播成員,使用最多的是打印網絡連接信息。
一、常見的參數:
-a (all)顯示所有選項,默認不顯示LISTEN相關
-t (tcp)僅顯示tcp相關選項
-u (udp)僅顯示udp相關選項
-n 拒絕顯示別名,能顯示數字的全部轉化成數字。
-l 僅列出有在 Listen (監聽) 的服務狀態
-p 顯示建立相關鏈接的程序名
-r 顯示路由信息,路由表
-e 顯示擴展信息,例如uid等
-s 按各個協議進行統計
-c 每隔一個固定時間,執行該netstat命令。
二、返回字段定義:
[root@localhost app]# netstat -anp Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 2717/master tcp 0 0 10.10.1.132:6379 0.0.0.0:* LISTEN 9717/redis-server 1 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1874/nginx: master tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1291/sshd tcp 0 0 10.10.1.132:6379 10.0.20.3:62257 ESTABLISHED 9717/redis-server 1 tcp 0 0 10.10.1.132:6379 10.10.1.113:51015 ESTABLISHED 9717/redis-server 1
Proto:代表協議(tcp、tcp6、udp、udp6)
Recv-Q:數據已經在本地接收緩沖,但是還沒有recv()
Send-Q:對方沒有收到的數據或者說沒有Ack的,還是本地緩沖區
Local Address: 本地IP:本地端口
Foreign Address: 遠程IP:遠程端口
State:鏈接狀態(監聽狀態:LISTEN、建立連接狀態:ESTABLISHED等)
PID:進程PID號
Program name:程序名字
三、常用的netstat命令:
1. 查詢進程號所占用的端口號: netstat -anp | grep 進程號
下圖中,可以看到監控狀態為LISTEN表示已經被占用,最后一列顯示被服務redis-server占用,查看具體端口號6379,只要有如圖這一行就表示被占用了。
!!此處注意,圖中如果顯示的是LISTENING並不表示端口被占用,不要和LISTEN混淆哦,查看具體端口時候,必須要看到tcp,端口號,LISTEN那一行,才表示端口被占用
[root@localhost app]# netstat -anp | grep 9717 tcp 0 0 10.10.1.132:6379 0.0.0.0:* LISTEN 9717/redis-server 1 tcp 0 0 10.10.1.132:6379 10.0.20.3:62257 ESTABLISHED 9717/redis-server 1 tcp 0 0 10.10.1.132:6379 10.10.1.113:51015 ESTABLISHED 9717/redis-server 1 tcp 0 0 10.10.1.132:6379 10.0.20.3:62252 ESTABLISHED 9717/redis-server 1
2. 查看端口號對應的進程,用於排查端口號是否被占用:netstat -tunlp | grep 端口號
-l 表示查找的是監聽狀態的(listen)的進程,非監聽的不會被查詢出來
[root@localhost app]# netstat -tunlp | grep 8080 tcp6 0 0 :::8080 :::* LISTEN 10841/java
3. 查看端口號的使用情況:netstat -anp | grep 端口號
[root@localhost app]# netstat -anp |grep 8080 tcp6 0 0 :::8080 :::* LISTEN 10841/java tcp6 0 0 127.0.0.1:8080 127.0.0.1:44093 ESTABLISHED 10841/java tcp6 0 0 127.0.0.1:44093 127.0.0.1:8080 ESTABLISHED 11061/java
4. 顯示pid和進程:netstat -pt
[root@localhost ~]# netstat -pt Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 10.10.1.132:6379 10.10.1.114:50267 ESTABLISHED 9717/redis-server 1 tcp 0 0 10.10.1.132:6379 10.0.20.3:60342 ESTABLISHED 9717/redis-server 1 tcp6 0 0 10.10.1.132:ddi-tcp-1 10.0.10.3:55131 ESTABLISHED 9147/java tcp6 0 0 10.10.1.132:46743 192.168.99.113:mysql ESTABLISHED 12349/java tcp6 0 0 10.10.1.132:47033 10.10.1.132:6379 ESTABLISHED 10841/java tcp6 0 0 10.10.1.132:us-srv 10.10.1.124:34405 FIN_WAIT2 -
5. 列出所有處於監聽狀態的 Sockets:
netstat -l #只顯示監聽端口 netstat -lt #只列出所有監聽 tcp 端口 netstat -lu #只列出所有監聽 udp 端口 netstat -lx #只列出所有監聽 UNIX 端口