netstat工具
简介
Netstat是一个网络工具,用于显示计算机与其他计算机或网络设备之间的详细通信信息。它可以显示有关单个网络连接、整体和协议特定的网络统计信息等内容,有助于解决某些网络问题。Netstat命令在Windows、macOS和Linux等操作系统中都可以使用。
以下是一些netstat命令的常用选项和示例:
-a
:显示所有活动的TCP连接和正在监听的TCP连接,以及正在监听的UDP端口。-b
:显示与每个连接关联的进程的实际文件名。-e
:显示有关网络连接的统计信息,包括字节数、单播数据包、非单播数据包等。-f
:强制netstat命令在可能的情况下显示每个外部IP地址的完全限定域名(FQDN)。-n
:防止netstat尝试为外部IP地址确定主机名。-o
:显示与每个连接关联的进程标识符(PID)。-p protocol
:仅显示特定协议的连接或统计信息。-r
:显示IP路由表。-s
:按协议显示详细统计信息。-t
:显示当前TCP卸载状态。-u
:显示所有NetworkDirect监听器、连接和共享端点。
除了常用选项和示例中提到的内容,netstat命令还有一些其他有用的选项,例如:
-c
:连续打印netstat信息,每隔一秒刷新一次。-i
:显示网络接口的信息,包括MTU(最大传输单元)以及接收和发送数据包的数量。-M
:显示伪装连接的信息。--verbose
:显示详细信息,包括不支持的地址族等。
以下是netstat命令的一些示例:
# 显示所有活动的TCP连接,并以FQDN格式显示连接的计算机
netstat -f
# 显示活动的TCP连接,并显示每个连接的进程标识符
netstat -o
显示系统上所有TCP连接的状态统计信息
netstat -tan|awk '$1~/tcp/{print $NF}'|sort|uniq -c|sort -nr
这个命令链是在Linux中用来显示系统上所有TCP连接的状态统计信息。让我们逐个解析这些命令:
-
netstat -tan
:netstat
是一个用于显示网络连接、路由表、接口统计等网络相关信息的命令。-t
表示要显示TCP连接。-a
表示显示所有(监听中的和建立的)连接。-n
表示以数字形式显示地址和端口号,而不是尝试去解析它们。-n
也意味着不会显示主机名和端口名,而是直接显示IP地址和端口号。
-
|
(管道符号):- 管道会把前一个命令的输出作为后一个命令的输入。
-
awk '$1~/tcp/{print $NF}'
:awk
是一个强大的文本处理工具,可以用来格式化文本文件中的数据。$1~/tcp/
表示如果第一列($1)包含字符串"tcp",则执行后面的大括号内的操作。{print $NF}
表示打印出这一行的最后一个字段(NF代表当前行的字段数量,$NF就是指第NF个字段)。这里假设最后一列是连接状态(通常是本地地址和端口),但实际上,对于netstat -tan
命令的输出,最后一列通常不是状态,而是在第二列。
-
| sort
:sort
命令用来对行进行排序,默认是字典排序。- 在这里,
sort
是为了将相同的数据集中在一起,方便后续的uniq
处理。
-
| uniq -c
:uniq
命令用来从排序后的文件中删除重复的行。-c
参数告诉uniq
要在每一行前面加上这一行出现的次数。
-
| sort -nr
:- 再次使用
sort
命令,但是这次添加了-n
和-r
参数。 -n
表示按照数字大小进行排序,而不是默认的字典排序。-r
表示反转输出,即按降序排列。
- 再次使用
综合起来,整个命令的作用是列出所有TCP连接的本地端口,并计算每个端口出现的次数,最后按照端口使用频率从高到低排序。这有助于找出哪些端口正在被大量使用,或者可能帮助排查服务器上的连接状况。
多用组合、少用继承
基于接口而非实现进行编程