1. 程式人生 > 其它 >Linux netstat命令詳解

Linux netstat命令詳解

一、netstat命令介紹

  Netstat 命令用於顯示各種網路相關資訊,如網路連線,路由表,介面狀態 (Interface Statistics),masquerade 連線,多播成員 (Multicast Memberships) 等等。輸入netstat命令之後,會出現如下內容:

Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 2 210.34.6.89:telnet 210.34.6.96:2873 ESTABLISHED
tcp 
296 0 210.34.6.89:1165 210.34.6.84:netbios-ssn ESTABLISHED tcp 0 0 localhost.localdom:9001 localhost.localdom:1162 ESTABLISHED tcp 0 0 localhost.localdom:1162 localhost.localdom:9001 ESTABLISHED tcp 0 80 210.34.6.89:1161 210.34.6.10:netbios-ssn CLOSE Active UNIX domain sockets (w/o servers) Proto RefCnt Flags Type State I
-Node Path unix 1 [ ] STREAM CONNECTED 16178 @000000dd unix 1 [ ] STREAM CONNECTED 16176 @000000dc unix 9 [ ] DGRAM 5292 /dev/log unix 1 [ ] STREAM CONNECTED 16182 @000000df ......

  從整體上看,netstat命令的輸出結果可以分為兩個部分:一個是Active Internet connections,稱為有源TCP連線,其中"Recv-Q"和"Send-Q"指的是接收佇列和傳送佇列。這些數字一般都應該是0,如果不是0則表示軟體包正在佇列中堆積,這種情況只會在非常少的情況見到。另一個是Active UNIX domain sockets,稱為有源Unix域套介面(和網路套接字一樣,但是隻能用於本機通訊,效能可以提高一倍)。Proto表示連線使用的協議,RefCnt表示連線到該套介面上的程序號,Type表示套介面的型別,State表示套介面當前的狀態,Path表示連線到套介面的其它程序使用的路徑名。

二、netstat常用引數

  netstat命令常用的選項引數如下表所示:

選項 功能
-a (all)顯示所有選項,預設不顯示LISTEN相關
-t (tcp)僅顯示tcp相關選項
-u (udp)僅顯示udp相關選項
-n 拒絕顯示別名,能顯示數字(IP)的全部轉化成數字(IP)
-l 僅列出有在 Listen (監聽) 的服務狀態
-p 顯示建立相關連結的程式名
-r 顯示路由資訊,路由表
-e 顯示擴充套件資訊,例如uid等
-s 按各個協議進行統計

提示:LISTEN和LISTENING的狀態只有用-a或者-l才能看到

三、netstat命令使用例項

【例1】列出所有埠(包括正在監聽和未監聽的)

[root@Gin scripts]# netstat -a | less -N
      1 Active Internet connections (servers and established)
      2 Proto Recv-Q Send-Q Local Address           Foreign Address         State
      3 tcp        0      0 0.0.0.0:8223            0.0.0.0:*               LISTEN
      4 tcp        0      0 0.0.0.0:29503           0.0.0.0:*               LISTEN
      5 tcp        0      0 localhost:1988          0.0.0.0:*               LISTEN
      6 tcp        0      0 n227-080-096.byted:8648 0.0.0.0:*               LISTEN
      7 tcp        0      0 n227-080-096.byted:8649 0.0.0.0:*               LISTEN
      8 tcp        0      0 0.0.0.0:sunrpc          0.0.0.0:*               LISTEN
      9 tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN
     10 tcp        0      0 localhost:smtp          0.0.0.0:*               LISTEN
     11 tcp        0      1 n227-080-096.byte:42246 n12-058-225.byted.:3379 SYN_SENT
     12 tcp        0      0 n227-080-096.byte:18484 n227-080-096.byted:2280 TIME_WAIT
     13 tcp        0      0 n227-080-096.byte:18666 n227-080-096.byted:2280 TIME_WAIT
     14 tcp        0      0 n227-080-096.byte:14324 n8-006-208.byted.o:http ESTABLISHED
......

less命令可以分頁顯示,-N引數可以列出行號

【例2】列出所有TCP埠

[root@Gin scripts]# netstat -at | less
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State     
tcp        0      0 *:ssh                       *:*                         LISTEN     
tcp        0     96 Gin:ssh                     192.168.17.1:60480          ESTABLISHED
tcp        0      0 *:ssh                       *:*                         LISTEN     
tcp        0      0 *:mysql                     *:*                         LISTEN
......

如果需要列出所有UDP埠,則netstat -au

【例3】列出只在監聽的埠

[root@Gin scripts]# netstat -l
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State     
tcp        0      0 *:ssh                       *:*                         LISTEN     
tcp        0      0 *:ssh                       *:*                         LISTEN     
tcp        0      0 *:mysql                     *:*                         LISTEN     
udp        0      0 *:bootpc                    *:*                                    
Active UNIX domain sockets (only servers)
Proto RefCnt Flags       Type       State         I-Node Path
unix  2      [ ACC ]     STREAM     LISTENING     7132   @/com/ubuntu/upstart
unix  2      [ ACC ]     STREAM     LISTENING     9569   /var/lib/mysql/mysql.sock
......

【例4】列出所有監聽TCP的埠

➜  test netstat -lt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:8223            0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:29503           0.0.0.0:*               LISTEN
tcp        0      0 localhost:1988          0.0.0.0:*               LISTEN
tcp        0      0 n227-080-096.byted:8648 0.0.0.0:*               LISTEN
tcp        0      0 n227-080-096.byted:8649 0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:sunrpc          0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN
tcp        0      0 localhost:smtp          0.0.0.0:*               LISTEN
......

如果需要列出所有監聽UDP的埠,則:netstat -lu

【例5】在netstat的輸出中顯示 PID 和程序名稱

  netstat -p 可以與其它開關一起使用,這樣可以新增 “PID/程序名稱” 到netstat的輸出中,這樣除錯的時候可以很方便的發現特定埠執行的程式

# netstat -pt
 Active Internet connections (w/o servers)
 Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
 tcp        1      0 ramesh-laptop.loc:47212 192.168.185.75:www        CLOSE_WAIT  2109/firefox
 tcp        0      0 ramesh-laptop.loc:52750 lax:www ESTABLISHED 2109/firefox