netstat命令
netstat
命令显示各种网络相关信息,例如网络连接、路由表、接口统计信息、伪装连接、多播成员身份等。
语法
代码语言:javascript复制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 -r
和route -e
产生相同的输出。--groups, -g
: 显示IPv4
和IPv6
的多播组成员身份信息。--interfaces, -i
: 显示所有网络接口的表。--masquerade, -M
: 显示伪装的连接列表。--statistics, -s
: 显示每个协议的摘要统计信息。
在第一个参数之后,以下选项指定netstat
的报告行为:
--verbose, -v
: 通过详细操作告诉用户发生了什么,特别是打印一些有关未配置地址族的有用信息。--wide, -W
: 使用指定宽度而不根据使用输出来截断IP
地址,为了不破坏现有的脚本,这是可选的。--numeric, -n
: 显示数字地址,而不是尝试确定符号主机、端口或用户名。--numeric-hosts
: 显示数字主机地址,但不影响端口或用户名的解析。--numeric-ports
: 显示数字端口号,但不影响主机名或用户名的解析。--numeric-users
: 显示数字用户id
,但不影响主机名或端口名的解析。--protocol=family, -A
: 指定要显示其连接的地址族(低级协议),该族是逗号分隔的地址族关键字列表,如inet
、unix
、ipx
、ax25
、netrom
和ddp
,这与使用--inet
、-unix(-x)
、-ipx
、-ax25
、-netrom
和--ddp
选项具有相同的效果,地址族inet
包括raw
、udp
和tcp
协议套接字。-c, --continuous
: 使netstat
每秒连续打印所选信息。-e, --extend
: 显示附加信息,使用此选项两次以获得最大细节。-o, --timers
: 包括与网络计时器相关的信息。-p, --program
: 显示PID
进程标识符和每个套接字所属的程序的名称。-l, --listening
: 只显示监听套接字,这些在默认情况下被省略。-a, --all
: 显示监听和非监听套接字,使用--interfaces
选项显示未启动的接口。-F
: 从FIB
打印路由信息,这是默认设置。-C
: 从路由缓存中打印路由信息。
网络连接
关于活跃的互联网连接TCP
、UDP
、raw
的信息属于以下类别:
Proto
: 套接字使用的协议tcp
、udp
、raw
。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
显示为ACC
,SO_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
: 统计。
示例
显示所有listening
与non-listening
的套接字,并使用管道和less
便于查看当前状态。
netstat -a | less
列出所有TCP
端口。
netstat -at
列出所有udp
端口。
netstat -au
仅列出侦听端口。
代码语言:javascript复制netstat -l
列出所有端口的统计信息。
代码语言:javascript复制netstat -s | less
显示使用TCP
的PID
和程序名。
netstat -pt
获取内核路由信息。
代码语言:javascript复制netstat -r
获取与ssh
相关的进程的网络信息。
netstat -ap | grep ssh
获取80
端口的网路状态信息。
netstat -anp |grep :80
获取网络接口列表。
代码语言:javascript复制netstat -i
获取网络接口列表与拓展信息。
代码语言:javascript复制netstat -ie
配合awk
命令获取TCP
套接字的状态统计信息。
netstat -ant|awk '/^tcp/ { S[$NF]} END {for(a in S) print (a,S[a])}'
每日一题
代码语言:javascript复制https://github.com/WindrunnerMax/EveryDay
参考
代码语言:javascript复制https://www.computerhope.com/unix/unetstat.htm
https://www.runoob.com/linux/linux-comm-netstat.html
https://www.geeksforgeeks.org/netstat-command-linux/