Linux命令之 netstat

1. 简介

netstat 命令用来打印 Linux 系统的网络状态信息,包括网络连接(network connections)、路由表(routing tables)、网络接口设备统计信息(interface statistics)等。

2. 命令格式及参数说明

netstat [OPTIONS]
-a, --all
	显示所有网络连接
-A,--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
	显示所有网络接口或指定的网络接口
-l, --listening
	显示监听中的套接字(默认选项)
-M, --masquerade
	显示伪装的网络连接
-n, --numeric
	显示数字形式地址而不是去解析主机、端口或用户名
--numeric-hosts
	以数字形式显示主机地址
--numeric-ports
	以数字形式显示端口号
--numeric-users
	以数字形式显示用户名
-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" 参数相同

3. 常用命令

3.1 列出所有端口信息

a. 列出所有端口信息(包括监听和未监听的),以数字形式地址形式

netstat -an

b. 列出所有tcp端口信息

netstat -at

c. 列出所有udp端口信息

netstat -au

3.2 列出所有处于监听状态的连接

a. 显示处于监听状态的所有连接。

nestat -l

b. 只显示处于监听状态的 tcp 连接。

netstat -lt

c. 只显示处于监听状态的 udp 连接。

netstat -lu

d. 只显示处于监听状态的 unix 连接。

netstat -lx

3.3 显示进程ID和名称

netstat -p
## 3.4 显示核心路由

```bash
$ netstat -r
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
default         10.6.0.1        0.0.0.0         UG        0 0          0 bond0
10.6.0.0        *               255.255.0.0     U         0 0          0 bond0
172.17.0.0      *               255.255.0.0     U         0 0          0 docker0

3.5 IP 和 TCP 分析

a. 查看本机连接的服务端口中连接数TOP的服务端IP。其中10.6.5.204为本地 IP

$ netstat -ant | grep "10.6.5.204" |awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr
     19 10.34.44.67
     15 10.33.8.7
     13 20.2.16.100
     ...

b. 查看 TCP 各种状态列表。

$ netstat -ant | awk '{print $6}' | sort | uniq
ESTABLISHED
Foreign
LISTEN
TIME_WAIT

4. netstat命令解析

[root@localhost all_kinds_corrupt]# netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN        
tcp        1      0 192.168.36.128:37112    8.43.85.3:443           CLOSE_WAIT 
tcp6       0    543 192.168.36.128:23       192.168.36.1:2160       ESTABLISHED     
...
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ACC ]     STREAM     LISTENING     48311    @/tmp/dbus-aEgyuJjT
unix  2      [ ACC ]     SEQPACKET  LISTENING     23811    /run/udev/control
unix  2      [ ACC ]     STREAM     LISTENING     44552    /var/run/mysqld/mysqlx.sock
unix  4      [ ]         DGRAM                    50       /run/systemd/notify
unix  2      [ ]         DGRAM                    52       /run/systemd/cgroups-agent
unix  23     [ ]         DGRAM                    67       /run/systemd/journal/dev-log
...

从整体上看 netstat 的输出结果可以分为两个部分。一个是 Active Internet connections,二是 Active UNIX domain sockets。

(1)Active Internet connections。
Active Internet connections 表示活跃的网络连接,包括 UDP 和 TCP连接信息。其中"Recv-Q"和"Send-Q"指接收队列和发送队列,这些数字一般都应该是0,如果不是则表示数据发送和接收队列存在堆积,这种情况较为少见。Local Address 和 Foreign Address 表示本地和远端的IP、端口,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 域套接字。
Proto 显示连接使用的协议;
RefCnt 表示使用数量,即通过此套接字连接的进程数;
Flags 显示的标志为SO_ACCEPTON(显示为 ACC)、SO_WAITDATA(W)或SO_NOSPACE(N)。如果相应的进程等待一个连接请求,那么SO_ACCECPTON用于未连接的套接字。其它标志通常并不重要。
Types显示套接口的类型,一般为DGRAM(数据报)、STREAM(数据流);
State 显示套接字当前的状态,此字段包含以下关键字之一:

FREE:套接字未分配。
LISTENING:套接字正在监听一个连接请求。除非设置 --listening (-l) 或者 --all (-a) 选项,否则不显示。
CONNECTING:套接字正要建立连接
CONNECTED:套接字已连接
DISCONNECTING:套接字已断开
(empty):套接字未连

I-Node 表示套接字的 Inode 节点号;
Path 表示套接字所在路径。

————————————————
版权声明:本文为CSDN博主「恋喵大鲤鱼」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/K346K346/article/details/86743379

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值