小小白祈祷中...

netstat 是一个用于网络诊断和管理的命令行工具,主要用来显示网络连接、路由表、接口统计、网络协议以及网络端口的使用情况。在 Linux、Unix 和 Windows 系统中都可以使用。

以下是对 netstat 命令的详细介绍,包括基本用法、常用选项和示例。


基本语法

1
netstat [选项]
  • 选项:用于指定要显示的信息类型,例如活动连接、监听端口、网络接口统计等。

常用选项

选项 功能
-a 显示所有连接和监听端口。
-t 显示 TCP 协议的连接。
-u 显示 UDP 协议的连接。
-l 仅显示监听状态的连接(Listening)。
-p 显示连接对应的进程信息(需要超级用户权限)。
-n 以数字形式显示地址和端口(不进行 DNS 或服务名解析,提高查询速度)。
-r 显示路由表。
-e 显示详细的网络信息(如数据包统计)。
-c 持续显示网络状态,每隔一段时间更新一次。
-s 按协议显示统计信息。
-i 显示网络接口的状态。

常用选项组合

  1. netstat -an

    • 显示所有连接和监听端口,使用数字形式表示地址和端口。
  2. netstat -tuln

    • 显示所有监听的 TCP 和 UDP 端口,使用数字形式。
  3. netstat -p

    • 显示连接对应的进程信息(需要 sudo 权限)。
  4. netstat -r

    • 显示路由表。
  5. netstat -i

    • 显示网络接口的状态。

详解选项和示例

显示所有连接和监听端口(-a

  • 命令:
    1
    netstat -a
  • 输出:
    • 显示所有活动的网络连接以及监听的端口(TCP 和 UDP)。

仅显示监听端口(-l

  • 命令:
    1
    netstat -l
  • 用途:
    • 查看当前系统正在监听的端口,通常用于检查服务器服务是否正常运行。

显示 TCP 连接(-t

  • 命令:
    1
    netstat -t
  • 用途:
    • 查看当前系统的所有 TCP 连接。

显示 UDP 连接(-u

  • 命令:
    1
    netstat -u
  • 用途:
    • 查看当前系统的所有 UDP 连接。

以数字形式显示地址和端口(-n

  • 命令:
    1
    netstat -an
  • 用途:
    • 不进行 DNS 和服务名解析,直接显示 IP 地址和端口号,提高查询速度。

显示连接对应的进程信息(-p

  • 命令:
    1
    sudo netstat -ap
  • 用途:
    • 查看每个连接或监听端口对应的进程名称和 PID(需要超级用户权限)。
  • 输出示例:
    1
    tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      1234/mysqld

显示路由表(-r

  • 命令:
    1
    netstat -r
  • 用途:
    • 显示系统的路由表,类似于 route -n 命令。
  • 输出示例:
    1
    2
    3
    Kernel IP routing table
    Destination Gateway Genmask Flags MSS Window irtt Iface
    0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0

显示网络接口状态(-i

  • 命令:
    1
    netstat -i
  • 用途:
    • 查看网络接口的传输状态,例如接收和发送的字节数、错误数等。
  • 输出示例:
    1
    2
    3
    Kernel Interface table
    Iface MTU RX-OK RX-ERR TX-OK TX-ERR
    eth0 1500 12345 0 23456 0

按协议统计网络信息(-s

  • 命令:
    1
    netstat -s
  • 用途:
    • 按协议(TCP、UDP、ICMP 等)显示网络统计信息。
  • 输出示例:
    1
    2
    3
    4
    5
    6
    7
    Tcp:
    12345 active connections openings
    23456 passive connection openings
    0 failed connection attempts
    Udp:
    5678 packets received
    0 packet receive errors

持续更新网络状态(-c

  • 命令:
    1
    netstat -c
  • 用途:
    • 每隔一秒更新一次网络连接状态,适合实时监控网络活动。

显示监听的 TCP 和 UDP 端口(-tuln

  • 命令:
    1
    netstat -tuln
  • 用途:
    • 查看当前监听的所有 TCP 和 UDP 端口,显示数字形式的 IP 和端口号。
  • 输出示例:
    1
    2
    3
    Proto Recv-Q Send-Q Local Address           Foreign Address         State
    tcp 0 0 127.0.0.1:22 0.0.0.0:* LISTEN
    udp 0 0 0.0.0.0:68 0.0.0.0:*

结合其他命令

查看某端口的使用情况

  • 查看系统中 80 端口是否被监听:
    1
    netstat -an | grep ":80"

查看某进程的网络连接

  • 查找 PID 为 1234 的进程的网络连接:
    1
    netstat -anp | grep "1234"

按状态过滤连接

  • 查看所有 ESTABLISHED 状态的连接:

    1
    netstat -an | grep ESTABLISHED
  • 查看所有处于 LISTEN 状态的端口:

    1
    netstat -an | grep LISTEN

统计连接数

  • 统计所有 ESTABLISHED 连接的数量:
    1
    netstat -an | grep ESTABLISHED | wc -l

注意事项

  1. 权限问题

    • 使用 -p 选项查看进程信息时,需要具备超级用户权限(sudo)。
  2. 替代工具

    • 在现代 Linux 系统中,netstat 已逐渐被 ss 命令取代:
      • ss 的功能和输出格式类似于 netstat,但性能更高。
      • 示例:
        1
        ss -tuln
  3. 性能问题

    • 如果系统中有大量网络连接,netstat 的执行速度可能较慢,ss 通常是更好的选择。

总结

  • netstat 是一个强大的网络诊断工具,可以快速查看系统的网络连接、监听端口、路由表和网络接口状态。
  • 常用组合
    • 查看监听的端口:netstat -tuln
    • 查看连接的进程:sudo netstat -ap
    • 查看路由表:netstat -r
  • 现代系统建议使用 ss 替代 netstat,但在许多场景下,netstat 仍然是非常有用的工具。