netstat:查看网络状态

xiaohai 2021-06-28 19:55:28 3061人围观 标签: Linux 
简介 netstat命令用于显示本机网络的连接状态、运行端口和路由表信息
说明

  netstat命令用于显示本机网络的连接状态、运行端口和路由表信息

格式

  netstat [option]

常用参数
  • -a或—all:显示所有连线中的Socket,监听状态和非监听状态的socket信息
  • -A<网络类型>或—<网络类型>:列出该网络类型连线中的相关地址;
  • -c或—continuous:持续列出网络状态,后面跟秒数表示每隔几秒就刷新显示一次
  • -g或—groups:显示多重广播功能群组组员名单;
  • -h或—help:在线帮助;
  • -i或—interfaces:显示网络接口信息,该功能类似于前面的ip -s link
  • -l或—listening:显示监控中的服务器的Socket;
  • -n或—numeric:直接使用ip地址,而不通过域名服务器;
  • -p或—programs:显示正在使用Socket的程序识别码PID和程序名称;
  • -r或—route:显示Routing Table;
  • -s或—statistice:显示网络工作信息统计表;
  • -t或—tcp:显示TCP传输协议的连线状况;
  • -u或—udp:显示UDP传输协议的连线状况;
示例

1、常用选项组合一(-an)

[root@localhost ~]# netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:27017           0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0      0 192.168.71.108:22       192.168.71.1:51578      ESTABLISHED
tcp        0     52 192.168.71.108:22       192.168.71.1:57791      ESTABLISHED
tcp6       0      0 :::3306                 :::*                    LISTEN     
tcp6       0      0 :::22                   :::*                    LISTEN     
udp        0      0 0.0.0.0:35416           0.0.0.0:*                          
udp        0      0 0.0.0.0:5353            0.0.0.0:*                          
raw6       0      0 :::58                   :::*                    7          
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ACC ]     STREAM     LISTENING     15623    /var/run/NetworkManager/private
unix  2      [ ACC ]     SEQPACKET  LISTENING     12872    /run/udev/control
unix  2      [ ]         DGRAM                    7512     /run/systemd/notify
unix  2      [ ]         DGRAM                    7514     /run/systemd/cgroups-agent
...

第一行活动网络连接说明:

列数 名称 含义
第1列 Proto socket使用协议(TCP、UDP、RAW)
第2列 Recv-Q 接收到但是还未处理的字节数
第3列 Send-Q 已经发送但是未被远程主机确认收到的字节数
第4列 Local Address 本地主机地址和端口
第5列 Foreign Address 远程主机地址和端口
第6列 State socket的状态,通常仅仅有TCP的状态,状态值可能有LISTEN、ESTABLISHED、SYN_SEND、SYN_RECV、FIN_WAIT1、FIN_WAIT2、FIN_WAIT等

State状态信息:

  • CLOSED:初始(无连接)状态。
  • LISTEN:侦听状态,等待远程机器的连接请求。
  • SYN_SEND:在TCP三次握手期间,主动连接端发送了SYN包后,进入SYN_SEND状态,等待对方的ACK包。
  • SYN_RECV:在TCP三次握手期间,主动连接端收到SYN包后,进入SYN_RECV状态。
  • ESTABLISHED:完成TCP三次握手后,主动连接端进入ESTABLISHED状态。此时,TCP连接已经建立,可以进行通信。
  • FIN_WAIT_1:在TCP四次挥手时,主动关闭端发送FIN包后,进入FIN_WAIT_1状态。
  • FIN_WAIT_2:在TCP四次挥手时,主动关闭端收到ACK包后,进入FIN_WAIT_2状态。
  • TIME_WAIT:在TCP四次挥手时,主动关闭端发送了ACK包之后,进入TIME_WAIT状态,等待最多MSL时间,让被动关闭端收到ACK包。
  • CLOSING:在TCP四次挥手期间,主动关闭端发送了FIN包后,没有收到对应的ACK包,却收到对方的FIN包,此时,进入CLOSING状态。
  • CLOSE_WAIT:在TCP四次挥手期间,被动关闭端收到FIN包后,进入CLOSE_WAIT状态。
  • LAST_ACK:在TCP四次挥手时,被动关闭端发送FIN包后,进入LAST_ACK状态,等待对方的ACK包。

2、常用组合二(-lntup)

[root@localhost ~]# netstat -lntup
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      1449/php-fpm: maste 
tcp        0      0 0.0.0.0:27017           0.0.0.0:*               LISTEN      1736/mongod         
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1199/nginx: master  
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1114/sshd           
tcp6       0      0 :::3306                 :::*                    LISTEN      3598/mysqld         
tcp6       0      0 :::22                   :::*                    LISTEN      1114/sshd           
udp        0      0 0.0.0.0:35416           0.0.0.0:*                           863/avahi-daemon: r 
udp        0      0 0.0.0.0:5353            0.0.0.0:*                           863/avahi-daemon: r

显示所有TCP和UDP正在监听的连接信息:

  • -l:显示所有LINTEN状态的网络连接
  • -n:显示IP地址,不进行DNS解析成主机名、域名
  • -t:显示所有tcp连接
  • -u:显示所有udp连接
  • -p:显示进程号和进程名

3、统计当前系统的路由表

[root@localhost ~]# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         192.168.71.2    0.0.0.0         UG        0 0          0 eno16777736
192.168.71.0    0.0.0.0         255.255.255.0   U         0 0          0 eno16777736

4、统计各个状态的网络连接数

[root@localhost ~]# netstat -an|awk '/^tcp/ {++count[$NF]} END {for(a in count) print a,count[a]}'
LISTEN 6
ESTABLISHED 1

[root@localhost ~]# netstat -n|awk '/^tcp/ {++count[$NF]} END {for(a in count) print a,count[a]}'
LISTEN 6
ESTABLISHED 1