A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
network statistics
是一个命令行工具,它显示网络连接(传入和传出),路由表和许多网络接口(网络接口控制器或软件定义的网络接口)和网络协议统计信息。 它可以在类 Unix 操作系统上使用,包括 OS X、Linux、Solaris 和 BSD,以及基于 Windows NT 的操作系统,包括 Windows XP、Windows Vista、Windows 7/8/10。
-bash: netstat: command not found #Debian apt-get install net-tools #Ubuntu apt-get install net-tools #Alpine apk add net-tools #Arch Linux pacman -S net-tools #Kali Linux apt-get install net-tools #CentOS yum install net-tools #Fedora dnf install net-tools #Raspbian apt-get install net-tools #Docker docker run cmd.cat/netstat netstat
netstat 命令它用于查找网络中的问题并确定网络上的流量作为性能度量。用来打印 Linux 中网络系统的状态信息,可让你得知整个 Linux 系统的网络情况。
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]
-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端口 #netstat 列出所有处于监听状态的 Sockets netstat -l #只显示监听端口 netstat -lt #只列出所有监听 tcp 端口 netstat -lu #只列出所有监听 udp 端口 netstat -lx #只列出所有监听 UNIX 端口 #netstat 显示每个协议的统计信息 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 显示核心路由信息
$ 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
netstat 找出程序运行的端口
#netstat 并不是所有的进程都能找到,没有权限的会不显示,使用 root 权限查看所有的信息。 (No info could be read for "-p": geteuid()=1004 but you should be root.) netstat -ap | grep ssh
netstat 找出运行在指定端口的进程:
netstat -an | grep ':80' #netstat 分组查看各种连接状态 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 (处理完毕,等待超时结束的请求数) #netstat 收集有关端口 80 上活动连接数的统计信息,并将此数据传递给 wc 命令, #该命令通过计算原始 netstat 输出的行来显示连接数。 netstat -an |grep :80 | wc -l #netstat 通过端口找进程 ID netstat -anp|grep 8081 | grep LISTEN|awk '{printf $7}'|cut -d/ -f1
显示网络接口列表
netstat -i #netstat 显示详细信息 ifconfig 使用 netstat -ie
netstat 查看连接某服务端口最多的的 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
netstat 查看 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
netstat 查看 phpfpm
进程数,如果接近预设值,说明不够用,需要增加:
netstat -anpo | grep "php-fpm" | wc -l
在 Windows 中,你可以使用类似于 Linux 下的 netstat 命令的方式来查看各端口的占用情况。具体做法是使用 PowerShell,并且结合 Select-Object 和 Group-Object 来实现端口的汇总显示。以下是一个示例:
Get-NetTCPConnection | Select-Object LocalAddress, LocalPort, RemoteAddress, RemotePort, State | Group-Object LocalPort | Format-Table Count, Name -AutoSize
这个命令使用 Get-NetTCPConnection
获取当前的 TCP 连接信息,然后通过 Select-Object
选择本地地址、本地端口、远程地址、远程端口和连接状态。接着使用 Group-Object
根据本地端口进行分组,最后通过 Format-Table
格式化输出,显示端口及其连接数量。
请注意,这个命令需要在管理员权限下运行,因为获取端口信息需要一定的权限。如果你发现没有获取到信息,可以尝试以管理员身份运行 PowerShell。
此外,你还可以使用 netstat 命令,但是需要使用一些参数来实现类似的效果。例如:
netstat -ano | Select-String 'LISTENING' | ForEach-Object { $_ -replace '\s+', ' ' } | Format-Table -AutoSize ============== Windows 下,将显示类似如下结果 ================= TCP 0.0.0.0:80 0.0.0.0:0 LISTENING 4 TCP 0.0.0.0:135 0.0.0.0:0 LISTENING 1084 TCP 0.0.0.0:445 0.0.0.0:0 LISTENING 4 TCP 0.0.0.0:1080 0.0.0.0:0 LISTENING 7288 TCP 0.0.0.0:2179 0.0.0.0:0 LISTENING 3336 TCP 0.0.0.0:3306 0.0.0.0:0 LISTENING 4440 TCP 0.0.0.0:7680 0.0.0.0:0 LISTENING 2056 TCP 0.0.0.0:33060 0.0.0.0:0 LISTENING 4440 TCP 0.0.0.0:49664 0.0.0.0:0 LISTENING 804 TCP 0.0.0.0:49665 0.0.0.0:0 LISTENING 1752 TCP 0.0.0.0:49666 0.0.0.0:0 LISTENING 1636 TCP 0.0.0.0:49668 0.0.0.0:0 LISTENING 948 TCP 0.0.0.0:49682 0.0.0.0:0 LISTENING 964 TCP 127.0.0.1:6379 0.0.0.0:0 LISTENING 8952 TCP 127.0.0.1:8680 0.0.0.0:0 LISTENING 4072 TCP 127.0.0.1:63169 0.0.0.0:0 LISTENING 7668 TCP 192.168.18.1:139 0.0.0.0:0 LISTENING 4 TCP 192.168.56.6:139 0.0.0.0:0 LISTENING 4 TCP [::]:80 [::]:0 LISTENING 4 TCP [::]:135 [::]:0 LISTENING 1084 TCP [::]:445 [::]:0 LISTENING 4 TCP [::]:1080 [::]:0 LISTENING 7288 TCP [::]:2179 [::]:0 LISTENING 3336 TCP [::]:3306 [::]:0 LISTENING 4440 TCP [::]:7680 [::]:0 LISTENING 2056 TCP [::]:33060 [::]:0 LISTENING 4440 TCP [::]:49664 [::]:0 LISTENING 804 TCP [::]:49665 [::]:0 LISTENING 1752 TCP [::]:49666 [::]:0 LISTENING 1636 TCP [::]:49668 [::]:0 LISTENING 948 TCP [::]:49682 [::]:0 LISTENING 964 TCP [::1]:49980 [::]:0 LISTENING 8212
这个命令使用 netstat -ano 获取所有网络连接和监听端口的信息,然后使用 Select-String 'LISTENING' 仅选择处于监听状态的端口。接着,ForEach-Object 用于将多个空格替换为单个空格,最后使用 Format-Table 格式化输出。同样,需要以管理员权限运行 PowerShell 才能获取完整信息。
在 macOS 上,netstat 命令的使用方式略有不同,而 -nlpt 选项也需要进行一些调整。以下是在 macOS 上获取类似于 Linux netstat -nlpt 的端口占用信息的方法:
sudo lsof -i -P -n | grep LISTEN
这个命令使用 lsof(List Open Files)工具,通过 -i 选项查看网络连接信息,-P 禁用端口和服务名的解析,-n 禁止将网络地址转换为主机名,最后通过 grep LISTEN
筛选处于监听状态的端口。请注意,由于涉及到系统信息和网络连接,可能需要使用 sudo 获取足够的权限。
此外,也可以使用 ss 命令来查看网络套接字信息,但请注意 macOS 并没有完全采用 Linux 版本的 ss 命令,因此具体选项可能有所不同。
sudo ss -l -n -t -p
这个命令使用 -l 显示监听状态的套接字,-n 禁用名称解析,-t 仅显示 TCP 套接字,-p 显示进程信息。
默认 Windows 下查看连接数不如 Linux 方便,微软官方出了一个小工具辅助查看:TCPViewer -> https://learn.microsoft.com/zh-tw/sysinternals/downloads/tcpview,如果是叫新版的 Win 下,可以使用 PowerShell 来获取服务器的并发连接数。如,使用 Get-NetTCPConnection | Measure-Object 来获取 TCP 连接数,或者使用 Get-NetTCPConnection -State Established | Measure-Object 来获取特定状态的连接数。
Get-NetTCPConnection -State Established | Measure-Object Count : 93 Average : Sum : Maximum : Minimum : Property :