Linux 命令(4)—— netstat 命令

本文爲轉載,原文鏈接爲https://blog.csdn.net/K346K346/article/details/86743379


一、命令簡介

netstat 命令用來打印 Linux 系統的網絡狀態信息,包括網絡連接(network connections)路由表(routing tables)網絡接口設備統計信息(interface statistics)僞裝連接(masquerade connections)和 多播成員信息(multicast memberships)等,可讓你得知 Linux 系統網絡的整體情況。

二、使用方法

netstat [OPTIONS]

三、命令選項

-a,--all:顯示所有連接和監聽端口
-A <family>,--protocol=<family>:列出指定地址族的連接信息。family爲逗號分隔的地址族關鍵字列表,比如inet,inet6,unix,ipx,ax25,netrom,econet和ddp等
-c,--continuous:每隔1s刷新網絡狀態
-C:從路由緩存獲取路由信息
-e,--extend:顯示網絡其他相關信息
-F:顯示FIB中的路由信息。(這是默認的選項) 
-g,--g:顯示IPv4和IPv6的多播組成員關係信息
-h,--help:在線幫助
-i,-I=<iface>,--interfaces=<iface>:顯示所有網絡接口列表或者是指定的iface
-l,--listening:顯示監聽中的套接字(這是默認選項)
-M,--masquerade:顯示僞裝的網絡連線
-n,--numeric:顯示數字形式地址而不是去解析主機、端口或用戶名
-N,--netlink,--symbolic:顯示網絡硬件外圍設備的符號連接名稱
-o,--timers:顯示計時器; 
-p,--programs:顯示正在使用Socket的進程ID和進程名
-r,--route:顯示內核路由表。命令route -e會產生同樣的結果
-s,--statistice:顯示每種協議的統計信息
-t,--tcp:顯示TCP傳輸協議的連接狀況
-u,--udp:顯示UDP傳輸協議的連接狀況
-v,--verbose:顯示指令執行過程。特別是打印一些關於未配置地址族的有用信息
-V,--version:顯示版本信息
-w,--raw:顯示RAW傳輸協議的連接狀況
-x,--unix:此參數的效果和指定"-A unix"參數相同
--ip,--inet:此參數的效果和指定"-A inet"參數相同

四、輸出字段說明

執行 netstat 命令輸出:

Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 9.77.9.126:47239        100.115.0.57:9922       ESTABLISHED
tcp        0     52 9.77.9.126:36000        10.19.88.119:58814      ESTABLISHED
tcp        0      0 9.77.9.126:37586        10.170.31.139:nsesrvr   ESTABLISHED
udp        0      0 TENCENT64:acp-proto     TENCENT64:openwebnet    ESTABLISHED
udp        0      0 TENCENT64:4216          TENCENT64:openwebnet    ESTABLISHED
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ]         DGRAM                    307286163 /tmp/agent_cmd.sock
unix  2      [ ]         DGRAM                    9484     /var/run/nscd/socket
unix  2      [ ]         DGRAM                    275      /run/systemd/notify
...

從整體上看 netstat 的輸出結果可以分爲兩個部分:

(1)Active Internet connections

  Active Internet connections表示活躍的網絡連接,包括UDP和TCP連接信息。

  1. Recv-QSend-Q指接收隊列和發送隊列。這些數字一般都應該是0,如果不是則表示數據發送和接收隊列存在堆積,這種情況較爲少見。
  2. Local AddressForeign Address表示本地和遠端的IP、端口。
  3. State表示連接的狀態,主要有:
LISTEN:監聽狀態;
SYN_SEND:客戶端在發送連接請求後進入SYN_SEND狀態,等待服務端的連接請求和確認,即等待服務端發送SYN+ACK包;
SYN_RECV:服務端在收到客戶端的連接請求後,發送SYN+ACK包後,進入SYN_RECV狀態;
ESTABLISHED:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK後,客戶端和服務器進入已建立連接狀態;
FIN-WAIT-1:客戶端發送連接中斷請求後進入FIN-WAIT-1狀態,等待服務端的確認;
FIN-WAIT-2:客戶端接收到服務端的終端確認後進入FIN-WAIT-2狀態,等待服務端的中斷請求;
CLOSE-WAIT:服務端在確認客戶端的中斷請求後,進入CLOSE-WAIT狀態,等待從本地用戶發來的連接中斷請求;
LAST-ACK:服務端向客戶端發送連接中斷請求後進入LAST-ACK狀態,等待來自客戶端的中斷請求確認;
TIME-WAIT:客戶端發送中斷請求確認後進入TIME-WAIT狀態,等待足夠的時間(2MSL)以確保服務端接收到來自客戶端的中斷請求確認; 
CLOSED:四次揮手結束後,客戶端和服務端進入連接斷開狀態。

(2)Active UNIX domain sockets

  Active UNIX domain sockets,稱爲活躍 Unix 域套接字。

  1. Proto 顯示連接使用的協議;
  2. RefCnt表示使用數量,即通過此套接字連接的進程數;
  3. Flags顯示的標誌爲SO_ACCEPTON(顯示爲 ACC)、SO_WAITDATA(W)或SO_NOSPACE(N)。如果相應的進程等待一個連接請求,那麼SO_ACCECPTON用於未連接的套接字。其它標誌通常並不重要。
  4. Types顯示套接口的類型,一般爲DGRAM(數據報)、STREAM(數據流);
  5. I-Node 表示套接字的Inode節點號;
  6. Path 表示套接字所在路徑;
  7. State顯示套接字當前的狀態,此字段包含以下關鍵字之一:
FREE:套接字未分配。
LISTENING:套接字正在監聽一個連接請求。除非設置 --listening (-l) 或者 --all (-a) 選項,否則不顯示。
CONNECTING:套接字正要建立連接
CONNECTED:套接字已連接
DISCONNECTING:套接字已斷開
(empty):套接字未連


五、常用示例

(1)列出所有端口信息(包括監聽和未監聽的)。

# netstat -a | more
 Active Internet connections (servers and established)
 Proto Recv-Q Send-Q Local Address           Foreign Address         State
 tcp        0      0 localhost:30037         *:*                     LISTEN
 udp        0      0 *:bootpc                *:*
 
Active UNIX domain sockets (servers and established)
 Proto RefCnt Flags       Type       State         I-Node   Path
 unix  2      [ ACC ]     STREAM     LISTENING     6135     /tmp/.X11-unix/X0
 unix  2      [ ACC ]     STREAM     LISTENING     5140     /var/run/acpid.socket

# 列出所有 tcp 端口
netstat -at

# 列出所有 udp 端口
netstat -au

(2)只列出所有監聽的端口。

netstat -l

# 只列出所有監聽tcp端口
netstat -lt

# 只列出所有監聽udp端口
netstat -lu

# 只列出所有監聽UNIX端口
netstat -lx

(3)顯示每個協議的統計信息。

# 顯示所有端口的統計信息
netstat -s

 Ip:
 11150 total packets received
 1 with invalid addresses
 0 forwarded
 0 incoming packets discarded
 11149 incoming packets delivered
 11635 requests sent out
 Icmp:
 0 ICMP messages received
 0 input ICMP message failed.
 Tcp:
 582 active connections openings
 2 failed connection attempts
 25 connection resets received
 Udp:
 1183 packets received
 4 packets to unknown port received.
 .....

# 顯示TCP端口的統計信息
netstat -st 

# 顯示UDP端口統計信息
netstat -su


(4)顯示進程ID和名稱,使用netstat -p-p選項可以與其它選項一起使用,可以添加PID/進程名稱netstat輸出中,這樣在debugging的時候可以很方便的發現特定端口運行的程序。

netstat -lpt

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN      663/sshd            
tcp6       0      0 [::]:mysql              [::]:*                  LISTEN      29429/mysqld        

(5)輸出中不顯示主機、端口和用戶名使用netstat -n,將會使用數字代替那些名稱。同樣可以加速輸出,因爲不用進行比對查詢。

netstat -n

Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 10.234.178.144:43538    100.113.169.225:31415   ESTABLISHED
tcp        0      0 10.234.178.144:33295    10.121.151.35:9876      ESTABLISHED

# 如果想讓這三個名稱中的一個使用數字代替,使用以下命令
netsat -a --numeric-ports
netsat -a --numeric-hosts
netsat -a --numeric-users

(6)持續輸出 netstat 信息。netstat -c將每隔一秒輸出網絡信息。

netstat -c


(7)顯示系統不支持的地址族 (Address Families)。

netstat --verbose

# 在輸出的末尾,會有如下的信息
netstat: no support for `AF IPX' on this system.
netstat: no support for `AF AX25' on this system.
netstat: no support for `AF X25' on this system.
netstat: no support for `AF NETROM' on this system.


(8)顯示核心路由信息。

netstat -r

Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         0.0.0.0         0.0.0.0         U         0 0          0 tunnat
9.0.0.0         10.175.82.193   255.0.0.0       UG        0 0          0 eth1
10.0.0.0        10.175.82.193   255.0.0.0       UG        0 0          0 eth1

  注意:使用netstat -rn顯示數字格式,不查詢主機名稱。


(9)找出程序運行的端口。並不是所有的進程都能找到,沒有權限的會不顯示,使用 root 權限查看所有的信息。

netstat -anp

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 10.175.82.204:61795     0.0.0.0:*               LISTEN      22006/./spp_pgg_dia 
tcp        0      0 10.175.82.204:55011     0.0.0.0:*               LISTEN      3228/./spp_pgg_vod_ 
tcp        0      0 10.175.82.204:10883     0.0.0.0:*               LISTEN      125115/./spp_pgg_co

(10)顯示網絡接口列表。

netstat -i

Kernel Interface table
Iface      MTU    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
eth1      1500 32898847246      0      0 51410  34664370715      0      0      0 BMRU
lo       65536 57852071211      0      0 0      57852071211      0      0      0 LRU
tunnat    1480        0      0      0 0      103182603      0      0      0 OPRU

# 顯示詳細信息,可以使用ifconfig或者netstat -ie。
netstat -ie

Kernel Interface table
eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.175.82.204  netmask 255.255.255.192  broadcast 10.175.82.255
        ether ec:f4:bb:e3:5b:b1  txqueuelen 10000  (Ethernet)
        RX packets 32900073183  bytes 21958447410400 (19.9 TiB)
        RX errors 0  dropped 0  overruns 51410  frame 0
        TX packets 34665611337  bytes 7109591105017 (6.4 TiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device memory 0x91d00000-91e00000
...


(11)IP和TCP分析。

# 查看本機連接的服務端口中連接數TOP的服務端IP。其中10.234.178.144:22爲本地IP端口
netstat -ant | grep "10.234.178.144:22" |awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -10

     24 100.112.141.208
      2 10.63.93.159
      2 10.191.131.38
      2 10.101.242.11
      2 100.92.40.70
      2 100.113.141.219
      2 100.112.159.163
      1 9.68.178.53
      1 10.191.134.83
      1 10.139.233.47
# 第二列爲服務端IP,左邊是本地發起的連接數


# 查看 TCP 各種狀態列表
netstat -ant | awk '{print $6}' | sort | uniq

CLOSE_WAIT
established)
ESTABLISHED
Foreign
LISTEN
TIME_WAIT


(12)顯示多播組信息。

netstat -g

IPv6/IPv4 Group Memberships
Interface       RefCnt Group
--------------- ------ ---------------------
lo              1      all-systems.mcast.net
eth1            1      all-systems.mcast.net
tunnat          1      all-systems.mcast.net
lo              1      ff02::1
lo              1      ff01::1
eth0            1      ff02::1
eth0            1      ff01::1
eth1            1      ff02::1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章