netstat 命令

| 选择喜欢的代码风格  

netstat 命令补充说明:


netstat 命令它用于查找网络中的问题并确定网络上的流量作为性能度量。用来打印 Linux 中网络系统的状态信息,可让你得知整个 Linux 系统的网络情况。

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 可以是以下选项的任意组合:

[-4] [-6] [--protocol={inet,unix,ipx,ax25,netrom,ddp}[,...]] [--unix|-x] 
[--inet|--ip] [--ax25] [--ipx] [--netrom] [--ddp]

netstat 命令选项:


-a或--all:显示所有连线中的Socket;
-A<网络类型>或--<网络类型>:列出该网络类型连线中的相关地址;
-c或--continuous:持续列出网络状态;
-C或--cache:显示路由器配置的快取信息;
-e或--extend:显示网络其他相关信息;
-F或--fib:显示FIB;
-g或--groups:显示多重广播功能群组组员名单;
-h或--help:在线帮助;
-i或--interfaces:显示网络界面信息表单;
-l或--listening:显示监控中的服务器的Socket;
-M或--masquerade:显示伪装的网络连线;
-n或--numeric:直接使用ip地址,而不通过域名服务器;
-N或--netlink或--symbolic:显示网络硬件外围设备的符号连接名称;
-o或--timers:显示计时器;
-p或--programs:显示正在使用Socket的程序识别码和程序名称;
-r或--route:显示Routing Table;
-s或--statistice:显示网络工作信息统计表;
-t或--tcp:显示TCP传输协议的连线状况;
-u或--udp:显示UDP传输协议的连线状况;
-v或--verbose:显示指令执行过程;
-V或--version:显示版本信息;
-w或--raw:显示RAW传输协议的连线状况;
-x或--unix:此参数的效果和指定"-A unix"参数相同;
--ip或--inet:此参数的效果和指定"-A inet"参数相同。

netstat 命令实例


#列出所有端口 (包括监听和未监听的)
netstat -a     #列出所有端口
netstat -at    #列出所有tcp端口
netstat -au    #列出所有udp端口 

#列出所有处于监听状态的 Sockets
netstat -l        #只显示监听端口
netstat -lt       #只列出所有监听 tcp 端口
netstat -lu       #只列出所有监听 udp 端口
netstat -lx       #只列出所有监听 UNIX 端口

#显示每个协议的统计信息
netstat -s   显示所有端口的统计信息
netstat -st   显示TCP端口的统计信息
netstat -su   显示UDP端口的统计信息
netstat -pt  

netstat -p 可以与其它开关一起使用,就可以添加 “PID/进程名称” 到 netstat 输出中,这样 debugging 的时候可以很方便的发现特定端口运行的程序。

在 netstat 输出中不显示主机,端口和用户名 (host, port or user),当你不想让主机,端口和用户名显示,使用 netstat -n。将会使用数字代替那些名称。同样可以加速输出,因为不用进行比对查询

netstat -an

#如果只是不想让这三个名称中的一个被显示,使用以下命令:
netstat -a --numeric-ports
netstat -a --numeric-hosts
netstat -a --numeric-users

持续输出 netstat 信息:

netstat -c   #每隔一秒输出网络信息
netstat --verbose #显示系统不支持的地址族(Address Families),如:
---------------
unix  2      [ ]         DGRAM                    14153    
netstat: no support for `AF IPX' on this system.
netstat: no support for `AF AX25' on this system.
netstat: no support for `AF X25' on this system.
netstat: no support for `AF NETROM' on this system.

命令详细说明


/[正则表达式]/   #匹配文本样式,比如/SERVER/,从第一行到包含SERVER的匹配行。
{*}     #表示根据匹配重复执行分割,直到文件尾停止,使用{整数}的形式指定分割执行的次数。
-s      #静默模式,不打印其他信息。
-n      #指定分割后的文件名后缀的数字个数。比如01、02、03等。
-f      #指定分割后的文件名前缀。
-b      #指定后缀格式。比如%02d.log,类似于C语言中的printf参数格式。
rm server00.log    #是删除第一个文件,因为分割后的的第一个文件没有内容,匹配的单词就位于文件的第一行中。

显示核心路由信息

$ netstat -r
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
default         gateway         0.0.0.0         UG        0 0          0 eth0
169.254.169.0   gateway         255.255.255.0   UG        0 0          0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 eth0

#使用 netstat -rn 显示数字格式,不查询主机名称。
$ netstat -rn
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
169.254.169.0   192.168.1.1     255.255.255.0   UG        0 0          0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 eth0

找出程序运行的端口

#并不是所有的进程都能找到,没有权限的会不显示,使用 root 权限查看所有的信息。
(No info could be read for "-p": geteuid()=1004 but you should be root.)

netstat -ap | grep ssh

找出运行在指定端口的进程

netstat -an | grep ':80'

#分组查看各种连接状态
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

LAST_ACK 15 (正在等待处理的请求数) 
SYN_RECV 3  
ESTABLISHED 50 (正常数据传输状态) 
FIN_WAIT2 5
TIME_WAIT 3173 (处理完毕,等待超时结束的请求数)

#收集有关端口80上活动连接数的统计信息,并将此数据传递给wc命令,
#该命令通过计算原始netstat输出的行来显示连接数。
netstat -an |grep :80 | wc -l

#通过端口找进程ID
netstat -anp|grep 8081 | grep LISTEN|awk '{printf $7}'|cut -d/ -f1


显示网络接口列表

netstat -i

#显示详细信息 ifconfig 使用 netstat -ie

netstat 命令 IP 和 TCP 分析:


查看连接某服务端口最多的的IP地址:

netstat -ntu | grep :80 | awk '{print $5}' | cut -d: -f1 | awk '{++ip[$1]} END {for(i in ip) print ip[i],"\t",i}' | sort -nr

TCP各种状态列表:

$ netstat -nt | grep -e 127.0.0.1 -e 0.0.0.0 -e ::: -v | awk '/^tcp/ {++state[$NF]} END {for(i in state) print i,"\t",state[i]}'
LAST_ACK         24
SYN_RECV         2
ESTABLISHED      59
FIN_WAIT1        7
FIN_WAIT2        13
TIME_WAIT        3292

查看 phpfpm 进程数,如果接近预设值,说明不够用,需要增加:

netstat -anpo | grep "php-fpm" | wc -l

netstat 命令扩展阅读:




发表评论