Linux 中的 Netstat 命令及示例

2025年3月17日 | 阅读 8 分钟

引言

Linux netstat 命令代表 **网络统计**。它显示了不同接口的统计信息,包括开放的套接字、路由表和连接信息。此外,它还可以用于显示所有套接字连接(包括 TCP、UDP)。除了已连接的套接字,它还显示等待连接的套接字。它是网络和系统管理员的一个方便工具。

在计算机中,netstat 命令是一个命令行网络工具,用于显示 TCP 的网络连接(包括出站和入站)、多个网络接口(软件定义的网络接口或网络接口控制器)、网络协议统计信息和路由表。它适用于 Plan 9、Unix、Inferno 和类 Unix 操作系统,包括 BSD、Solaris、Linux 和 macOS。此外,它还适用于 IBM OS/2 和基于 Microsoft Windows NT 的操作系统,包括 Windows 10、Windows 8、Windows 7、Windows Vista 和 Windows XP。

在网络中,它用于发现问题并确定流量作为性能测量。此程序在 Linux 上几乎已过时,尽管仍在一些发行版中添加。

Linux 上的 netstat 命令已被 **“ss”** 取代。ip route 命令是 netstat -r 命令的替代品,ip maddr 命令是 netstat -i 命令的替代品,都建议使用。

提供的统计信息

Netstat 提供以下统计信息

  • **协议 (Proto):** 协议是协议名称(UDP 或 TCP)。
  • **本地地址 (Local Address):** 本地地址指定正在使用的本地计算机的 IP 地址和端口号。除非指定了参数,即 -n,否则将显示与 IP 地址和端口名称相关的本地计算机名称。当服务器在每个接口中处于活动(监听)状态时,主机会显示一个星号 (*)。如果端口尚未建立,端口号将显示为星号。
  • **外部地址 (Foreign Address):** 与套接字链接的远程计算机的端口号和 IP 地址。除非指定了参数,即 -n,否则将显示与 IP 地址和所有端口相关的名称。如果端口尚未建立,端口号将显示为星号。
  • **状态 (State):** 表示 TCP 连接状态。有几种可能的状态,包括 TIME_WAIT、SYN_SEND、SYN_RECEIVED、LISTEN、LAST_ACK、FIN_WAIT_2、FIN_WAIT_1、ESTABLISHED、CLOSED 和 CLOSE_WAIT。

下面提到了一些 netstat 命令及其描述

命令描述
netstat -a表示所有套接字,包括非监听和监听,以及所有协议,如 UDP、TCP 等。
netstat -at仅表示 TCP 连接(-au 仅表示 UDP 连接)。
netstat -ant表示所有 TCP 连接,不进行 DNS 解析(而是显示 IP 地址)。
netstat -al仅显示监听套接字。
netstat -aep显示 PID 以及所有套接字所属的功能;e 包括额外信息,如用户。以 root 身份执行以检查所有 PID。
netstat -s > file2.txt显示网络统计信息。
netstat -i显示所有网络接口的表格。添加 -e 以获得与 ifconfig 相同的结果。
netstat -r显示内核路由信息。结果与 route -e 类似。
netstat -ct定期显示 TCP 连接。
netstat -g显示 IPv6 和 IPv4 的多播组成员信息。
netstat -atnp | grep ESTA显示当前所有“已建立”的 TCP 连接。
netstat -lntu显示所有正在监听的 UDP 和 TCP 服务,以及本地设备上所有空闲的开放端口。

语法

netstat 命令支持各种命令行选项。netstat 命令的基本语法如下

选项

它支持多个命令行选项来打印有关 Linux 网络子系统的信息。输出由第一个参数控制。让我们看看第一个参数列表

**(无):** 如果未指定任何选项,它将执行默认命令,该命令显示所有已配置地址族的开放套接字列表。

**--route, -r:** 用于打印内核路由表。“netstat -r”命令和“route -e”命令将产生相同的输出。

**--groups, -g:** 用于显示不同 IP 版本 (IPv4 和 IPV6) 的多播组成员信息。

**--interfaces, -i:** 用于显示所有网络接口。

**--masquerade, -M:** 它显示伪装连接。

**--statistics, -s:** 此选项显示每个协议的摘要统计信息。

其他选项

**--verbose, -v:** 用于显示详细输出。它是显示未配置地址族详细信息的一个方便工具。

**--wide, -W:** 用于输出时不必要地缩减 IP 地址。它仍然是可选的,以避免破坏现有脚本。

**--numeric, -n:** 用于显示数字地址,而不是定义符号主机、端口或用户名。

**--numeric-hosts:** 用于显示数字主机地址;它不影响端口或用户名的解析。

**--numeric-ports:** 用于显示数字端口号,它不影响主机或用户名的属性和对象。

**--numeric-users:** 用于显示数字用户 ID,它不影响主机或端口名称的解析。

**--protocol=family, -A:** 用于指定要显示连接的地址族。地址族以逗号 (',') 分隔,如 Inet、inet6、Unix、ax25、Netrom、Econet、Ipx、DDP 和 Bluetooth。

**-c, --continuous:** 用于每秒连续显示选定的信息。

**-e, --extend:** 用于扩展输出。此选项可以使用两次以获得最大详细信息。

**-o, --timers:** 用于包含网络计时器相关信息。

**-p, --program:** 用于显示相应套接字的 PID 和进程名称。

**-l, --listening:** 用于仅显示监听套接字。

**-a, --all:** 用于显示所有套接字(即监听和非监听)。通过指定“--interfaces”选项,我们可以列出未启动的接口。

**-F:** 用于显示 FIB 中的路由信息。

**-C:** 用于显示路由缓存中的路由信息。

netstat 命令的安装

如果您的机器上没有安装 netstat 命令,它将显示传统的 Linux 安装错误消息“Command 'netstat' not found.”

要安装它,请执行以下命令

上述命令将要求输入管理员密码来安装该命令。如果成功安装,它将产生以下输出

Linux netstat

netstat 命令的示例

让我们看看 netstat 命令的以下示例

  • 显示所有连接
  • 仅显示 TCP 或 UDP 连接
  • 禁用反向 DNS 查找以加快输出速度
  • 仅显示监听连接
  • 显示 Pid 和 Uid
  • 显示统计信息
  • 显示内核路由信息
  • 显示网络接口
  • 连续显示 netstat 输出
  • 显示多播组信息

显示所有连接

“-a”选项用于显示所有现有连接。按如下方式执行 netstat 命令

上述命令将列出所有现有连接。请看下面的输出

Linux netstat

仅显示 TCP 或 UDP 连接

我们可以只列出 TCP 或 UDP 连接。要只显示 TCP 连接,请按如下方式使用“t”选项执行命令

上述命令将列出所有 TCP 连接。请看下面的输出

Linux netstat

要只显示 UDP 连接,请按如下方式使用“u”选项执行

上述命令将列出所有 UDP 连接。请看下面的输出

Linux netstat

禁用反向 DNS 查找以加快输出速度

netstat 命令的默认行为是通过反向 DNS 查找来查找每个 IP 地址的主机名。这会导致输出速度变慢。如果我们不想知道主机名,则通过抑制“n”选项来禁用反向 DNS 查找:请看下面的命令

上述命令将禁用反向 DNS 查找并显示所有 TCP 连接。请看下面的输出

Linux netstat

仅显示监听连接

监听连接是可用于连接请求的连接。任何网络进程都会为监听传入连接请求保持一个开放端口。这些连接可以通过执行以下命令来列出

上述命令将列出 TCP 连接的所有监听连接。请看下面的输出

Linux netstat

显示 Pid 和 Uid

在检查网络统计信息时,有时了解特定连接或用户的 Pid 和 Uid 至关重要。Pid 和 Uid 可以通过执行“p”选项来列出。执行以下命令

上述命令将列出 TCP 连接的所有 Pid。必须以 sudo 权限执行此命令。否则,它将不会显示 Pid。请看下面的输出

Linux netstat

显示统计信息

netstat 命令也是一个方便的工具,用于显示网络统计信息,例如协议发送和接收的数据包数量。要显示网络统计信息,请使用“-s”选项执行命令,如下所示

上述命令将显示网络统计信息。请看下面的输出

Linux netstat

显示内核路由信息

“r”选项用于显示内核路由信息。它将显示与 route 命令相同的输出。要显示路由信息,请按如下方式执行命令

上述命令将显示路由信息。“n”选项将禁用主机名查找。请看下面的输出

Linux netstat

显示网络接口

我们还可以使用 netstat 命令显示有关网络接口的信息。要显示网络接口,请按如下方式使用“i”选项执行命令

上述命令将列出网络接口和相关信息。请看下面的输出

Linux netstat

连续显示 netstat 输出

要连续显示 netstat 输出,请按如下方式使用“c”选项执行命令

上述命令将连续显示 TCP 连接。请看下面的输出

Linux netstat

显示多播组信息

“g”选项用于显示多播组信息。要打印 IPv4 和 IPv6 的详细信息,请按如下方式执行命令

上述命令将显示多播组信息。请看下面的输出

Linux netstat

在 Linux 中安装 Net-Tools

netstat 命令是名为 net-tools 的软件包的一部分。我们使用 Ubuntu 中的以下命令获取 net-tools 软件包

<

检查 Netstat 版本

安装过程完成后,我们可以使用以下命令检查已安装的 Netstat 版本

显示路由表

netstat 命令在命令行上显示路由表信息。如果我们要检查路由表,可以使用 Netstat 的 -nr 选项;它将以与 route 类似的形式显示内核路由表。我们可以运行以下命令

-nr 标志允许 Netstat 显示用点分隔的地址,而不是应用符号地址标题。

显示网络连接

netstat 命令有多种选项可用于查看被动和活动套接字。活动 TCP、Unix、RAW 和 UDP 套接字连接分别由 -x、-w、-u 和 -t 选项表示。

我们可以运行以下命令

显示网络服务

我们可以执行以下命令来查看网络列表、其相关端口及其当前状态

显示 UDP 和 TCP 连接的所有监听端口

我们可以通过在终端窗口中运行以下命令来查看所有 UDP 和 TCP 端口

显示所有监听连接

我们可以使用带有 -l 选项的 netstat 命令来列出所有活动连接


下一主题Linux ss