netstat 是 Linux 上的一个网络连接分析工具。 显示与网络相关的信息,如开放的连接、开放的套接字端口等。 是运维场景下一个排查问题的利器。

常用命令

  • 列出所有端口的网络连接信息: netstat -a
  • 列出所有监听端口的网络连接信息: netstat -l
  • 列出所有监听的 TCP 端口的网络连接信息: netstat -t
  • 显示特定协议的PID和程序名称下的网络连接信息: netstat -p $PROTOCOL
  • 打印路由表: netstat -nr

连接状态统计

考虑一个场景, 想知道主机上 TCP 连接, 有多少个处于 ESTABLISHED 或者 CLOSING 状态,这时可以考虑通过以下命令 拿到主机上的 不同状态的统计信息:

netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"\t",state[key]}'

命令输出 Demo:

1
2
3
4
5
6
$ netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"\t",state[key]}'
FIN_WAIT_2 	 1
SYN_SENT 	 7
CLOSING 	 1
TIME_WAIT 	 1
ESTABLISHED 	 9