简介
netstat 命令是 Linux 系统中一个非常常用的网络工具,用于查询和统计网络连接的状态和数据传输情况。在网络故障排除和性能调优中,netstat 命令是必不可少的工具之一。本文将详细介绍 netstat 命令的常用参数及其用法。
命令格式
netstat [-a] [-c] [-e] [-f] [-i] [-n] [-o] [-p protocol] [-r] [-s] [-t] [-u] [interval]
常用选项
netstat
命令的常用选项如下:
-
-a
(all):显示所有连接状态,包括 TCP、UDP 和 Unix 域套接字;-
-t
(tcp):显示 TCP 连接状态; -
-u
(udp):显示 UDP 连接状态; -
-x
:列出所有unix端口
-
-
-c
(continuous):连续显示网络状态信息。按 Ctrl + C 结束。 -
-e
(extend):显示网络统计信息。包括网络接口、协议等。 -
-f
:显示外部地址的完全限定域名(FQDN)。 -
-i
:显示网络接口信息。 -
-n
:以数字形式显示地址和端口号。 -
-o
:显示与每个连接相关的进程 ID。 -
-p protocol
:显示特定协议(tcp、udp 或 icmp)的连接。 -
-r
:显示路由表。 -
-s
:显示网络统计信息。包括网络接口、协议等。 -
-t
:显示 TCP 协议的连接。 -
-u
:显示 UDP 协议的连接。 -
interval
:指定连续显示网络状态信息的时间间隔(单位为秒)。
常用命令
查询进程所占用的端口号
netstat -ano | grep 进程ID
查看端口号的使用情况
netstat -ano | grep 端口号
显示所有连接和监听端口并显示每个连接相关的进程ID
netstat -ano
显示UDP、TCP协议的连接的统计信息并显示每个连接相关的进程 ID
netstat -so -p udp
netstat -so -p tcp
IPv4 的 TCP 统计信息
主动开放 = 8055
被动开放 = 1136
失败的连接尝试 = 2469
重置连接 = 1712
当前连接 = 67
接收的分段 = 2473796
发送的分段 = 454254
重新传输的分段 = 10493
活动连接
协议 本地地址 外部地址 状态 PID
TCP 127.0.0.1:6000 kubernetes:51683 ESTABLISHED 16460
TCP 127.0.0.1:6000 kubernetes:51684 ESTABLISHED 16460
显示所有已建立的连接
netstat -ano | grep ESTABLISHED
TCP 127.0.0.1:6000 127.0.0.1:51684 ESTABLISHED 16460
TCP 127.0.0.1:6000 127.0.0.1:51685 ESTABLISHED 16460
显示每个进程的连接数
netstat -ano | grep ESTABLISHED | awk '{print $5}' | sort | uniq -c | sort -nr | head -10
netstat -ano
: 显示所有连接和监听端口,以数字形式显示地址和端口号,并显示与每个连接相关的进程 ID
TCP 0.0.0.0:47001 0.0.0.0:0 LISTENING 4
TCP 0.0.0.0:49664 0.0.0.0:0 LISTENING 1044
TCP 127.0.0.1:4244 0.0.0.0:0 LISTENING 15104
TCP 127.0.0.1:6000 127.0.0.1:51683 ESTABLISHED 16460
TCP 127.0.0.1:6000 127.0.0.1:51685 ESTABLISHED 16460
...
UDP 192.168.2.226:1900 *:* 10428
UDP 192.168.2.226:61395 *:* 10428
UDP [::]:3702 *:* 15956
UDP [::]:57584 *:* 15956
UDP [::1]:1900 *:* 10428
UDP [::1]:61392 *:* 10428
UDP [fe80::b131:35eb:14b3:8958%50]:1900 *:* 10428
grep ESTABLISHED
:过滤出已建立的连接。
TCP 127.0.0.1:6000 127.0.0.1:51683 ESTABLISHED 16460
TCP 127.0.0.1:6000 127.0.0.1:51685 ESTABLISHED 16460
TCP 127.0.0.1:49671 127.0.0.1:62522 ESTABLISHED 8244
TCP 127.0.0.1:49672 127.0.0.1:49673 ESTABLISHED 6952
TCP 127.0.0.1:49673 127.0.0.1:49672 ESTABLISHED 6952
TCP 127.0.0.1:51058 127.0.0.1:51059 ESTABLISHED 4612
TCP 127.0.0.1:51059 127.0.0.1:51058 ESTABLISHED 4612
TCP 127.0.0.1:51061 127.0.0.1:51062 ESTABLISHED 4612
awk '{print $5}'
:提取出第5列进程ID。
16460
16460
8244
6952
6952
4612
4612
4612
sort | uniq -c | sort -nr
:排序统计每个进程ID的连接数量,并按照连接数量从高到低排序;
-
sort
:排序。 -
uniq -c
:用于在文本中查找并计数唯一行,有点像count - group by -
sort -nr
:用于对文本进行排序。-
-n
选项表示按照数值大小排序,而不是按照字典序排序; -
-r
选项表示按照逆序排序,即从大到小排序。
-
netstat -ano | grep ESTABLISHED | awk '{print $5}' | sort
16460
16460
4612
4612
4612
6952
6952
8244
netstat -ano | grep ESTABLISHED | awk '{print $5}' | sort | uniq -c
2 16460
3 4612
2 6952
1 8244
netstat -ano | grep ESTABLISHED | awk '{print $5}' | sort | uniq -c | sort -nr
3 4612
2 16460
2 6952
1 8244
head
: 显示前面的若干行。
netstat -ano | grep ESTABLISHED | awk '{print $5}' | sort | uniq -c | sort -nr | head -2
3 4612
2 16460
显示每个IP地址的连接数
netstat -ano | awk '{print $3}' | cut -d: -f1 | sort | uniq -c | sort -rn
cut -d: -f1
:用于从文本中剪切文本并打印出指定字段。目的是从连接信息中提取远程 IP 地址,剔除掉冒号和端口号。
-
-d:
表示使用冒号作为分隔符 -
-f1
表示提取分隔符左边的第一个字段
netstat -ano | grep ESTABLISHED | awk '{print $3}'
127.0.0.1:51240
10.2.3.411:443
110.236.32.1:443
netstat -ano | awk '{print $3}' | cut -d: -f1
127.0.0.1
10.2.3.411
110.236.32.1
其他命令跟上面一样单步调试即可。
显示每种类型TCP/UDP的连接数
netstat -ano | awk '{print $1}' | sort | uniq -c
120 TCP
82 UDP
显示每种网络状态的数量
// TCP 网络状态的数量
netstat -ano |grep TCP | awk '{print $4}' | sort | uniq -c
62 ESTABLISHED
51 LISTENING
2 TIME_WAIT
显示指定进程ID网络状态的数量
// TCP 网络状态的数量
netstat -ano |grep 进程ID | awk '{print $4}' | sort | uniq -c
62 ESTABLISHED
51 LISTENING
2 TIME_WAIT
显示端口占用数量
netstat -ano | grep -c :
或者
netstat -a -n | grep -c "TCP"
netstat -a -n | grep -c "UDP"
netstat -a -n | grep -w "TCP" | wc -l
netstat -ano | awk 'NR>2{print $1}' | sort | uniq -c | awk '{print $2 "占用了"$1"个端口"}'
上面的都有重复
netstat -ano | awk '{print $3}' | cut -d: -f1 | sort | uniq -c | sort -rn
grep -c :
: grep 命令用于在文件或输出中查找与指定模式匹配的行,并将匹配的行打印出来。
- 其中 -c 选项用于统计匹配到的行数
-
:
: 表示匹配冒号字符。
因此,grep -c :
命令会统计输出或文件中包含冒号字符的行数。
显示指定进程ID指定协议的数量
netstat -ano | grep 进程ID | grep UDP | grep -v -E ':5353|::'
-
-v
:排除相关的行。grep -v UDP
排除UDP相关的行。 -
-E 'keyword1|keyword2|keyword3'
: 匹配多个关键词,keyword1
、keyword2
和keyword3
是关键词,用|
分隔。 -
wc -l
: 用于统计文件的行数文章来源:https://www.toymoban.com/news/detail-416903.htmlnetstat -ano | grep 6712 | grep UDP | grep -v -E ':5353|::' | wc -l
文章来源地址https://www.toymoban.com/news/detail-416903.html
网络状态
State | 状态 |
---|---|
LISTENING | 监听中,服务端需要打开一个socket进行监听,侦听来自远方TCP端口的连接请求 |
ESTABLISHED | 已连接,代表一个打开的连接,双方可以进行或已经在数据交互了 |
SYN_SENT | 客户端通过应用程序调用connect发送一个SYN以请求建立一个连接。在收到ACK后,状态转为ESTABLIHSED。 |
CLOSE_WAIT | 被动关闭端接到FIN后,就发出ACK以回应FIN请求(它的接收也作为文件结束符传递给上层应用程序) |
TIME_WAIT | 主动关闭端接收到FIN后,TCP就发送ACK包,并进入TIME-WAIT状态 |
LAST_ACK | 等待对方回应一个ACK(这是准备关闭连接的一个步骤,意味着这个连接正在关闭) |
到了这里,关于netstat 命令详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!