netstat命令

netstat命令显示各种网络相关信息,例如网络连接、路由表、接口统计信息、伪装连接、多播成员身份等。

语法

netstat [address_family_options] [--tcp|-t] [--udp|-u] [--raw|-w] 
        [--listening|-l] [--all|-a] [--numeric|-n] [--numeric-hosts] 
        [--numeric-ports] [--numeric-users] [--symbolic|-N] 
        [--extend|-e[--extend|-e]] [--timers|-o] [--program|-p] 
        [--verbose|-v] [--continuous|-c]

netstat {--route|-r} [address_family_options] [--extend|-e[--extend|-e]] 
        [--verbose|-v] [--numeric|-n] [--numeric-hosts] [--numeric-ports] 
        [--numeric-users] [--continuous|-c]
        
netstat {--interfaces|-i} [--all|-a] [--extend|-e[--extend|-e]] [--verbose|-v] 
        [--program|-p] [--numeric|-n] [--numeric-hosts] [--numeric-ports] 
        [--numeric-users] [--continuous|-c]

netstat {--groups|-g} [--numeric|-n] [--numeric-hosts] [--numeric-ports] 
        [--numeric-users] [--continuous|-c]
        
netstat {--masquerade|-M} [--extend|-e] [--numeric|-n] [--numeric-hosts] 
        [--numeric-ports] [--numeric-users] [--continuous|-c]
        
netstat {--statistics|-s} [--tcp|-t] [--udp|-u] [--raw|-w]

netstat {--version|-V}

netstat {--help|-h}

address_family_options may be any combination of the following options: 
[-4] [-6] [--protocol={inet,unix,ipx,ax25,netrom,ddp}[,...]] [--unix|-x] 
[--inet|--ip] [--ax25] [--ipx] [--netrom] [--ddp]

参数

netstat打印的信息类型由第一个参数控制,该参数是以下参数之一:

  • (none): 默认情况下,netstat显示打开的套接字列表,如果未指定任何地址族,则将打印所有已配置地址族的活动套接字。
  • --route, -r: 显示内核路由表,netstat -rroute -e产生相同的输出。
  • --groups, -g: 显示IPv4IPv6的多播组成员身份信息。
  • --interfaces, -i: 显示所有网络接口的表。
  • --masquerade, -M: 显示伪装的连接列表。
  • --statistics, -s: 显示每个协议的摘要统计信息。

在第一个参数之后,以下选项指定netstat的报告行为:

  • --verbose, -v: 通过详细操作告诉用户发生了什么,特别是打印一些有关未配置地址族的有用信息。
  • --wide, -W: 使用指定宽度而不根据使用输出来截断IP地址,为了不破坏现有的脚本,这是可选的。
  • --numeric, -n: 显示数字地址,而不是尝试确定符号主机、端口或用户名。
  • --numeric-hosts: 显示数字主机地址,但不影响端口或用户名的解析。
  • --numeric-ports: 显示数字端口号,但不影响主机名或用户名的解析。
  • --numeric-users: 显示数字用户id,但不影响主机名或端口名的解析。
  • --protocol=family, -A: 指定要显示其连接的地址族(低级协议),该族是逗号分隔的地址族关键字列表,如inetunixipxax25netromddp,这与使用--inet-unix(-x)-ipx-ax25-netrom--ddp选项具有相同的效果,地址族inet包括rawudptcp协议套接字。
  • -c, --continuous: 使netstat每秒连续打印所选信息。
  • -e, --extend: 显示附加信息,使用此选项两次以获得最大细节。
  • -o, --timers: 包括与网络计时器相关的信息。
  • -p, --program: 显示PID进程标识符和每个套接字所属的程序的名称。
  • -l, --listening: 只显示监听套接字,这些在默认情况下被省略。
  • -a, --all: 显示监听和非监听套接字,使用--interfaces选项显示未启动的接口。
  • -F: 从FIB打印路由信息,这是默认设置。
  • -C: 从路由缓存中打印路由信息。

网络连接

关于活跃的互联网连接TCPUDPraw的信息属于以下类别:

  • Proto: 套接字使用的协议tcpudpraw
  • Recv-Q: 连接到此套接字的用户程序未复制的字节数。
  • Send-Q: 远程主机未确认的字节数。
  • Local Address: 套接字本地端的地址和端口号,除非指定了--numeric, -n选项,否则套接字地址将解析为其规范的主机名FQDN,并且端口号将转换为相应的服务名。
  • Foreign Address: 套接字远端的地址和端口号,类似于本地地址。
  • State: socket的状态,由于在原始套接字raw模式中没有状态,而且UDP中通常没有使用状态,因此这一列可以留空,通常这可以是以下值之一,TCP握手与挥手的过程中通常会经历这些状态。
    • ESTABLISHED: 套接字已建立连接。
    • SYN_SENT: 套接字正在积极尝试建立连接。
    • SYN_RECV: 从网络接收到连接请求。
    • FIN_WAIT1: 套接字已关闭,连接正在关闭。
    • FIN_WAIT2: 连接已关闭,套接字正在等待从远端关闭。
    • TIME_WAIT: 套接字在关闭后正在等待处理仍在网络中的数据包。
    • CLOSE: 没有使用该套接字。
    • CLOSE_WAIT: 远端已关闭,等待套接字关闭。
    • LAST_ACK: 远端已经关闭,套接字已关闭,等待确认。
    • LISTEN: 套接字正在监听传入的连接,除非指定--listening, -l--all, -a选项,否则此类套接字不包含在输出中。
    • CLOSING: 两个套接字都关闭了,但我们仍然没有发送所有的数据。
    • UNKNOWN: 套接字的状态未知。
  • User: 套接字所有者的用户名或用户ID(UID)
  • PID/Program name: 进程ID(PID)和拥有套接字的进程的进程名称之间用斜杠分隔,--program使该列包括在内,需要超级用户特权才能在不拥有的套接字上查看此信息,此标识信息尚不适用于IPX套接字。

UNIX域套接字

有关活动UNIX域套接字的信息属于以下类别:

  • Proto: 套接字使用的协议,通常是unix

  • RefCnt: 引用计数,即通过此套接字连接的进程。

  • Flags: 显示的标志是SO_ACCEPTON显示为ACCSO_WAITDATA(W)SO_NOSPACE(N),如果未连接的套接字的相应进程正在等待连接请求,则在未连接的套接字上使用SO_ACCECPTON,其他标志不是正常的关注点。

  • Type: 套接字访问有几种类型:

    • SOCK_DGRAM: 套接字用于数据报(无连接)模式。
    • SOCK_STREAM: 这是一个流(连接)套接字。
    • SOCK_RAW: 该套接字用作原始套接字。
    • SOCK_RDM: 这个服务提供可靠的消息传递。
    • SOCK_SEQPACKET: 这是一个顺序数据包套接字。
    • SOCK_PACKET: 原始接口访问套接字。
  • State: 该字段将包含以下关键字之一:

    • FREE: 未分配套接字。
    • LISTENING:套接字正在监听连接请求,仅当指定--listening, -l--all, -a选项时,此类套接字才会包含在输出中。
    • CONNECTING: 套接字即将建立连接。
    • CONNECTED: 套接字已连接。
    • DISCONNECTING: 套接字正在断开连接。
    • (empty): 该套接字未连接到另一套接字。
  • PID/Program name:打开套接字的进程的进程ID(PID)和进程名称。

  • Path: 这是相应进程附加到套接字的路径名。

  • Active IPX sockets: 活动IPX套接字的列表。

  • Active NET/ROM sockets: 活动NET/ROM套接字的列表。

  • Active AX.25 sockets: 活动AX.25套接字的列表。

文件

netstat使用以下文件:

  • /etc/services: 服务转换文件。
  • /proc: proc文件系统的挂载点,它以文件层次结构的形式提供对内核状态信息的访问。
  • /proc/net/dev: 设备信息文件。
  • /proc/net/raw: 原始套接字信息。
  • /proc/net/tcp: TCP套接字信息。
  • /proc/net/udp: UDP套接字信息。
  • /proc/net/igmp: IGMP多播信息。
  • /proc/net/unix: Unix域套接字信息。
  • /proc/net/ipx: IPX套接字信息。
  • /proc/net/ax25: AX25套接字信息。
  • /proc/net/appletalk: DDP(appletalk)套接字信息。
  • /proc/net/nr: NET/ROM套接字信息。
  • /proc/net/route: IP路由信息。
  • /proc/net/ax25_route: AX25路由信息。
  • /proc/net/ipx_route: IPX路由信息。
  • /proc/net/nr_nodes: NET/ROM节点列表。
  • /proc/net/nr_neigh: NET/ROM邻居。
  • /proc/net/ip_masquerade: 伪装的连接。
  • /proc/net/snmp: 统计。

示例

显示所有listeningnon-listening的套接字,并使用管道和less便于查看当前状态。

netstat -a | less

列出所有TCP端口。

netstat -at

列出所有udp端口。

netstat -au

仅列出侦听端口。

netstat -l

列出所有端口的统计信息。

netstat -s | less

显示使用TCPPID和程序名。

netstat -pt

获取内核路由信息。

netstat -r

获取与ssh相关的进程的网络信息。

netstat -ap | grep ssh

获取80端口的网路状态信息。

netstat -anp |grep :80

获取网络接口列表。

netstat -i

获取网络接口列表与拓展信息。

netstat -ie

配合awk命令获取TCP套接字的状态统计信息。

netstat -ant|awk '/^tcp/ {++S[$NF]} END {for(a in S) print (a,S[a])}'

每日一题

https://github.com/WindrunnerMax/EveryDay

参考

https://www.computerhope.com/unix/unetstat.htm https://www.runoob.com/linux/linux-comm-netstat.html https://www.geeksforgeeks.org/netstat-command-linux/