Linux 命令 | netstat

发布时间 2023-03-28 13:22:17作者: 菜乌

netstat 通常用来检查各端口的网络连接情况。

可以显示 IP、TCP、UDP、ICMP 协议相关数据。


最常用方式

netstat -tlunp,显示结果如下:

image

第二行的列名说明了每一列的内容


结果含义

  • Proto 协议名称

  • Recv-Q 网络接收队列,表示还有多少没被进程取走的数据,通常为 0

  • Send-Q 网络发送队列,表示远程没有收到的数据量,通常为 0

  • Local Address 本地地址

    • 127.0.0.1:port 表示只能本机访问

    • ::1:port 对应 IPv6,本机访问

    • 0.0.0.0:port 表示对外开放的 IPv4

    • :::port 表示对外开放的 IPv6 端口

  • Foreign Address 外部地址,格式和本地地址一样

  • State 链路状态

  • PID/Program name 进程号/应用名称


TCP 连接状态

上图中倒数第二列 State 显示了 tcp 的连接状态,有以下几种状态

  • LISTEN,监听外部 TCP 端口连接请求

  • ESTABLISHED,已建立连接

  • CLOSE-WAIT,等待从本地用户发来的连接中断请求

  • CLOSING,等待远程 TCP 对连接中断的确认

  • TIME-WAIT,等待足够的时间以确保远程TCP接收到连接中断请求的确认

  • CLOSED,连接关闭

  • SYN-SENT,发送连接请求后等待匹配

  • SYN-RECEIVED,收到和发送一个连接请求后等待对方确认

  • FIN-WAIT-1,等待远程 TCP 连接中断请求,或先前的连接中断请求的确认

  • FIN-WAIT-2,从远程 TCP 等待连接中断请求

  • LAST-ACK,等待原来的发向远程 TCP 的连接中断请求的确认


常用命令

根据需求,用命令参数自由组合,获取需要的信息

  • netstat -at 所有 TCP 端口连接

  • netstat -lt 所有处于监听状态的 TCP 端口连接

  • netstat -st 所有 TCP 端口连接的统计信息

  • netstat -pt 所有 TCP 端口连接并显示 PID 和进程名称

  • netstat -tlunp 所有处于监听状态的 TCP/UDP 连接信息,以 IP 形式显示,并显示 PID 和进程名称

  • netstat -tlunp | grep 80 | wc -l 查询 80 端口的连接个数


命令参数

  • -a(–all) 显示所有连接

  • -A<网络类型>(–<网络类型>) 显示该网络类型连接信息,例:-A unix

  • -c(–continuous) 持续列出网络连接

  • -C(–cache) 显示路由器配置的快取信息

  • -e(–extend) 显示网络其他相关信息

  • -F(–fib) 显示FIB

  • -g(–groups) 显示 IPV4 以及 IPV6 的多播组信息

  • -h(–help) 帮助文档

  • -i(–interfaces) 显示网卡信息

  • -l(–listening) 显示监听中的连接信息,不与 a 连用,因为 a 会输出所有连接

  • -M(–masquerade) 显示伪装的网络连接

  • -n(–numeric) 直接输出数字,不执行反向查询,结果输出会快很多。

  • -N(–netlink或–symbolic) 显示网络硬件外围设备的符号连接名称

  • -o(–timers) 显示计时器

  • -p(–programs) 显示正在使用连接的 PID 和程序名称

  • -r(–route) 显示核心路由信息

  • -s(–statistice) 显示所有连接的统计信息,包括接收/发送的包数量

  • -t(–tcp) 显示 TCP 协议的连接

  • -u(–udp) 显示 UDP 协议的连接

  • -v(–verbose) 显示指令执行过程

  • -V(–version) 显示版本信息

  • -w(–raw) 显示 RAW 协议的连接

  • -x(–unix) 显示 unix 连接信息,同 -A unix

  • –ip(–inet) 显示 inet 连接信息,同 -A inet