一天一个 Linux 命令(43):netstat 命令
一、简介
Linux下的netstat命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。netstat是在内核中访问网络及相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告。
从整体上看,netstat的输出结果可以分为两个部分:一个是Active Internet connections,称为有源TCP连接,其中”Recv-Q”和”Send-Q”指的是接收队列和发送队列。这些数字一般都应该是0。如果不是则表示软件包正在队列中堆积。这种情况只能在非常少的情况见到;另一个是Active UNIX domain sockets,称为有源Unix域套接口(和网络套接字一样,但是只能用于本机通信,性能可以提高一倍)。
二、格式说明
代码语言:javascript复制netstat [-acCeFghilMnNoprstuvVwx][-A<网络类型>][--ip]
netstat [参数]
usage: netstat [-vWeenNcCF] [<Af>] -r netstat {-V|--version|-h|--help}
netstat [-vWnNcaeol] [<Socket> ...]
netstat { [-vWeenNac] -I[<Iface>] | [-veenNac] -i | [-cnNe] -M | -s [-6tuw] } [delay]
-r, --route display routing table
-I, --interfaces=<Iface> display interface table for <Iface>
-i, --interfaces display interface table
-g, --groups display multicast group memberships
-s, --statistics display networking statistics (like SNMP)
-M, --masquerade display masqueraded connections
-v, --verbose be verbose
-W, --wide don't truncate IP addresses
-n, --numeric don't resolve names
--numeric-hosts don't resolve host names
--numeric-ports don't resolve port names
--numeric-users don't resolve user names
-N, --symbolic resolve hardware names
-e, --extend display other/more information
-p, --programs display PID/Program name for sockets
-o, --timers display timers
-c, --continuous continuous listing
-l, --listening display listening server sockets
-a, --all display all sockets (default: connected)
-F, --fib display Forwarding Information Base (default)
-C, --cache display routing cache instead of FIB
-Z, --context display SELinux security context for sockets
<Socket>={-t|--tcp} {-u|--udp} {-U|--udplite} {-S|--sctp} {-w|--raw}
{-x|--unix} --ax25 --ipx --netrom
<AF>=Use '-6|-4' or '-A <af>' or '--<af>'; default: inet
List of possible address families (which support routing):
inet (DARPA Internet) inet6 (IPv6) ax25 (AMPR AX.25)
netrom (AMPR NET/ROM) ipx (Novell IPX) ddp (Appletalk DDP)
x25 (CCITT X.25)
三、选项说明
代码语言:javascript复制-a或--all 显示所有连线中的Socket。
-A<网络类型>或--<网络类型> 列出该网络类型连线中的相关地址。
-c或--continuous 持续列出网络状态。
-C或--cache 显示路由器配置的快取信息。
-e或--extend 显示网络其他相关信息。
-F或--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或--statistics 显示网络工作信息统计表。
-t或--tcp 显示TCP传输协议的连线状况。
-u或--udp 显示UDP传输协议的连线状况。
-v或--verbose 显示指令执行过程。
-V或--version 显示版本信息。
-w或--raw 显示RAW传输协议的连线状况。
-x或--unix 此参数的效果和指定"-A unix"参数相同。
--ip或--inet 此参数的效果和指定"-A inet"参数相同。
四、命令功能
利用 netstat 指令可让你得知整个 Linux 系统的网络情况。
五、常见用法
5.1 显示详细的网络
代码语言:javascript复制# netstat -a
netstat的输出结果可以分为两个部分:
一个是Active Internet connections,称为有源TCP连接,其中"Recv-Q"和"Send-Q"指的是接收队列和发送队列。这些数字一般都应该是0。如果不是则表示软件包正在队列中堆积。这种情况只能在非常少的情况见到。
另一个是Active UNIX domain sockets,称为有源Unix域套接口(和网络套接字一样,但是只能用于本机通信,性能可以提高一倍)。
Proto显示连接使用的协议,RefCnt表示连接到本套接口上的进程号,Types显示套接口的类型,State显示套接口当前的状态,Path表示连接到套接口的其它进程使用的路径名。
套接口类型:
-t :TCP
-u :UDP
-raw :RAW类型
--unix :UNIX域类型
--ax25 :AX25类型
--ipx :ipx类型
--netrom :netrom类型
状态说明:
LISTEN:侦听来自远方的TCP端口的连接请求
SYN-SENT:再发送连接请求后等待匹配的连接请求(如果有大量这样的状态包,检查是否中招了)
SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认(如有大量此状态,估计被flood攻击了)
ESTABLISHED:代表一个打开的连接
FIN-WAIT-1:等待远程TCP连接中断请求,或先前的连接中断请求的确认
FIN-WAIT-2:从远程TCP等待连接中断请求
CLOSE-WAIT:等待从本地用户发来的连接中断请求
CLOSING:等待远程TCP对连接中断的确认
LAST-ACK:等待原来的发向远程TCP的连接中断请求的确认(不是什么好东西,此项出现,检查是否被攻击)
TIME-WAIT:等待足够的时间以确保远程TCP接收到连接中断请求的确认
CLOSED:没有任何连接状态
5.2 显示当前UDP连接
代码语言:javascript复制# netstat -nu
5.3 显示当前TCP连接
代码语言:javascript复制netstat -nt
5.3 显示UDP端口号的使用
代码语言:javascript复制# netstat -apu
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
udp 0 0 0.0.0.0:bootpc 0.0.0.0:* 933/dhclient
udp 0 0 service-01:ntp 0.0.0.0:* 663/ntpd
udp 0 0 VM-0-15-centos:ntp 0.0.0.0:* 663/ntpd
udp6 0 0 service-01:ntp [::]:* 663/ntpd
udp6 0 0 VM-0-15-centos:ntp [::]:* 663/ntpd
5.4 显示网卡列表
代码语言:javascript复制# netstat -i
Kernel Interface table
Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500 125094783 0 0 0 135609023 0 0 0 BMRU
lo 65536 21298782 0 0 0 21298782 0 0 0 LRU
5.5 显示组播组的关系
代码语言:javascript复制# netstat -g
IPv6/IPv4 Group Memberships
Interface RefCnt Group
--------------- ------ ---------------------
lo 1 all-systems.mcast.net
eth0 1 all-systems.mcast.net
lo 1 ff02::1
lo 1 ff01::1
eth0 1 ff02::1:ff3a:5f30
eth0 1 ff02::1
eth0 1 ff01::1
5.6 显示网络统计信息
代码语言:javascript复制# netstat -s
Ip:
141486693 total packets received
0 forwarded
0 incoming packets discarded
141486593 incoming packets delivered
154098495 requests sent out
48 dropped because of missing route
82 reassemblies required
14 packets reassembled ok
14 fragments received ok
82 fragments created
Icmp:
13813314 ICMP messages received
425 input ICMP message failed.
InCsumErrors: 1
ICMP input histogram:
destination unreachable: 3239
timeout in transit: 432
echo requests: 13809376
echo replies: 175
timestamp request: 91
13809624 ICMP messages sent
0 ICMP messages failed
ICMP output histogram:
destination unreachable: 143
echo request: 14
echo replies: 13809376
timestamp replies: 91
IcmpMsg:
InType0: 175
InType3: 3239
InType8: 13809376
InType11: 432
InType13: 91
OutType0: 13809376
OutType3: 143
OutType8: 14
OutType14: 91
Tcp:
11025992 active connections openings
2461256 passive connection openings
248809 failed connection attempts
39534 connection resets received
14 connections established
123115503 segments received
134149976 segments send out
5202375 segments retransmited
24422 bad segments received.
302984 resets sent
InCsumErrors: 23807
Udp:
4252325 packets received
143 packets to unknown port received.
0 packet receive errors
4252618 packets sent
0 receive buffer errors
0 send buffer errors
UdpLite:
TcpExt:
288 SYN cookies sent
1 SYN cookies received
157837 invalid SYN cookies received
228014 resets received for embryonic SYN_RECV sockets
994 packets pruned from receive queue because of socket buffer overrun
246 ICMP packets dropped because they were out-of-window
965882 TCP sockets finished time wait in fast timer
7253 packets rejects in established connections because of timestamp
3912126 delayed acks sent
522 delayed acks further delayed because of locked socket
Quick ack mode was activated 152550 times
3986 times the listen queue of a socket overflowed
5811 SYNs to LISTEN sockets dropped
984697 packets directly queued to recvmsg prequeue.
464913 bytes directly in process context from backlog
26707475 bytes directly received in process context from prequeue
27708536 packet headers predicted
5630 packets header predicted and directly queued to user
44344525 acknowledgments not containing data payload received
14968170 predicted acknowledgments
153 times recovered from packet loss due to fast retransmit
81069 times recovered from packet loss by selective acknowledgements
918 bad SACK blocks received
Detected reordering 1005 times using FACK
Detected reordering 1003 times using SACK
Detected reordering 32 times using reno fast retransmit
Detected reordering 4401 times using time stamp
1875 congestion windows fully recovered without slow start
4205 congestion windows partially recovered using Hoe heuristic
6088 congestion windows recovered without slow start by DSACK
55385 congestion windows recovered without slow start after partial ack
TCPLostRetransmit: 27834
31 timeouts after reno fast retransmit
11862 timeouts after SACK recovery
44654 timeouts in loss state
383435 fast retransmits
25395 forward retransmits
547771 retransmits in slow start
3856050 other TCP timeouts
TCPLossProbes: 589192
TCPLossProbeRecovery: 284584
30 classic Reno fast retransmits failed
35939 SACK retransmits failed
160352 DSACKs sent for old packets
1155 DSACKs sent for out of order packets
316513 DSACKs received
4149 DSACKs for out of order packets received
26395 connections reset due to unexpected data
1736 connections reset due to early user close
7726 connections aborted due to timeout
TCPSACKDiscard: 41
TCPDSACKIgnoredOld: 437
TCPDSACKIgnoredNoUndo: 217313
TCPSpuriousRTOs: 4212
TCPSackShiftFallback: 699121
TCPBacklogDrop: 1
TCPReqQFullDoCookies: 288
TCPRetransFail: 5
TCPRcvCoalesce: 11995363
TCPOFOQueue: 399736
TCPOFOMerge: 1519
TCPChallengeACK: 2475
TCPSYNChallenge: 622
TCPFastOpenCookieReqd: 11
TCPSpuriousRtxHostQueues: 39326
TCPAutoCorking: 533
TCPFromZeroWindowAdv: 449
TCPToZeroWindowAdv: 449
TCPWantZeroWindowAdv: 3253
TCPSynRetrans: 3411152
TCPOrigDataSent: 76114506
TCPHystartTrainDetect: 1896
TCPHystartTrainCwnd: 74460
TCPHystartDelayDetect: 6891
TCPHystartDelayCwnd: 423886
TCPACKSkippedSynRecv: 29912
TCPACKSkippedPAWS: 1152
TCPACKSkippedSeq: 971
TCPACKSkippedTimeWait: 12
TCPACKSkippedChallenge: 239
IpExt:
InNoRoutes: 1
InMcastPkts: 305307
InOctets: 68437168659
OutOctets: 92168136568
InMcastOctets: 10991052
InNoECTPkts: 143634491
InECT1Pkts: 3
InECT0Pkts: 8407
InCEPkts: 1217
按照各个协议分别显示其统计数据。如果我们的应用程序(如Web浏览器)运行速度比较慢,或者不能显示Web页之类的数据,那么我们就可以用本选项来查看一下所显示的信息。我们需要仔细查看统计数据的各行,找到出错的关键字,进而确定问题所在。
5.7 显示监听的套接口
代码语言:javascript复制# netstat -l
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 VM-0-15-centos:6666 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:http 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:https 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:cslistener 0.0.0.0:* LISTEN
tcp6 0 0 [::]:mysql [::]:* LISTEN
udp 0 0 0.0.0.0:bootpc 0.0.0.0:*
udp 0 0 service-01:ntp 0.0.0.0:*
udp 0 0 VM-0-15-centos:ntp 0.0.0.0:*
udp6 0 0 service-01:ntp [::]:*
udp6 0 0 VM-0-15-centos:ntp [::]:*
Active UNIX domain sockets (only servers)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ACC ] STREAM LISTENING 13070 /var/run/lsm/ipc/simc
unix 2 [ ACC ] STREAM LISTENING 9486 /run/systemd/journal/stdout
unix 2 [ ACC ] STREAM LISTENING 12846 /run/dbus/system_bus_socket
unix 2 [ ACC ] STREAM LISTENING 532120 /tmp/mysql.sock
unix 2 [ ACC ] STREAM LISTENING 10552 /run/lvm/lvmpolld.socket
unix 2 [ ACC ] STREAM LISTENING 11852 /run/lvm/lvmetad.socket
unix 2 [ ACC ] STREAM LISTENING 13946 /var/run/lsm/ipc/sim
unix 2 [ ACC ] STREAM LISTENING 14462 /var/run/acpid.socket
unix 2 [ ACC ] STREAM LISTENING 291339499 /usr/local/qcloud/YunJing/conf/ydrpc_1
unix 2 [ ACC ] SEQPACKET LISTENING 11925 /run/udev/control
unix 2 [ ACC ] STREAM LISTENING 11719 /run/systemd/private
unix 2 [ ACC ] STREAM LISTENING 21457 /tmp/tmux-0/default
5.8 显示所有已建立的有效连接
代码语言:javascript复制# netstat -n
5.9 显示关于以太网的统计数据
代码语言:javascript复制# netstat -e
用于显示关于以太网的统计数据。它列出的项目包括传送的数据报的总字节数、错误数、删除数、数据报的数量和广播的数量。这些统计数据既有发送的数据报数量,也有接收的数据报数量。这个选项可以用来统计一些基本的网络流量
5.10 显示关于路由表的信息
代码语言:javascript复制# netstat -r
Destination Gateway Genmask Flags MSS Window irtt Iface
default gateway 0.0.0.0 UG 0 0 0 eth0
link-local 0.0.0.0 255.255.0.0 U 0 0 0 eth0
172.21.0.0 0.0.0.0 255.255.240.0 U 0 0 0 eth0
5.11 统计机器中网络连接各个状态个数
代码语言:javascript复制netstat -a | awk '/^tcp/ { S[$NF]} END {for(a in S) print a, S[a]}'
LISTEN 7
CLOSE_WAIT 314
ESTABLISHED 7
TIME_WAIT 5
5.12 把状态全都取出来后使用uniq -c统计后再进行排序
代码语言:javascript复制netstat -nat |awk '{print $6}'|sort|uniq -c
314 CLOSE_WAIT
1 established)
12 ESTABLISHED
1 FIN_WAIT2
1 Foreign
7 LISTEN
2 SYN_RECV
3 TIME_WAIT
5.13 查看程序运行的端口
代码语言:javascript复制netstat -ap | grep ssh
5.14 在 netstat 输出中显示 PID 和进程名称
代码语言:javascript复制netstat -pt
5.15 找出运行在指定端口的进程,根据端口号查找进程名
代码语言:javascript复制netstat -anpt | grep '80'
运行在端口80的进程id为13548,再通过ps命令就可以找到具体的应用程序了。
代码语言:javascript复制ps -aux | grep 13548