前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux命令(55)——netstat命令

Linux命令(55)——netstat命令

作者头像
恋喵大鲤鱼
发布2019-03-05 10:26:55
1.3K0
发布2019-03-05 10:26:55
举报
文章被收录于专栏:C/C++基础C/C++基础

1.简介

netstat命令用来打印Linux系统的网络状态信息,包括网络连接(network connections)、路由表(routing tables)、网络接口设备统计信息(interface statistics)、伪装连接(masquerade connections)和多播成员信息(multicast memberships)等,可让你得知Linux系统网络的整体情况。

2.输出结果整体说明

执行netstat命令输出:

Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 9.77.9.126:47239        100.115.0.57:9922       ESTABLISHED
tcp        0     52 9.77.9.126:36000        10.19.88.119:58814      ESTABLISHED
tcp        0      0 9.77.9.126:37586        10.170.31.139:nsesrvr   ESTABLISHED
udp        0      0 TENCENT64:acp-proto     TENCENT64:openwebnet    ESTABLISHED
udp        0      0 TENCENT64:4216          TENCENT64:openwebnet    ESTABLISHED
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ]         DGRAM                    307286163 /tmp/agent_cmd.sock
unix  2      [ ]         DGRAM                    9484     /var/run/nscd/socket
unix  2      [ ]         DGRAM                    275      /run/systemd/notify

从整体上看netstat的输出结果可以分为两个部分。一个是Active Internet connections,二是Active UNIX domain sockets。

(1)Active Internet connections Active Internet connections表示活跃的网络连接,包括UDP和TCP连接信息。其中"Recv-Q"和"Send-Q"指接收队列和发送队列,这些数字一般都应该是0,如果不是则表示数据发送和接收队列存在堆积,这种情况较为少见。Local Address和Foreign Address表示本地和远端的IP、端口,State表示连接的状态,主要有:

LISTEN:监听状态;
SYN_SEND:客户端在发送连接请求后进入SYN_SEND状态,等待服务端的连接请求和确认,即等待服务端发送SYN+ACK包;
SYN_RECV:服务端在收到客户端的连接请求后,发送SYN+ACK包后,进入SYN_RECV状态;
ESTABLISHED:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK后,客户端和服务器进入已建立连接状态;
FIN-WAIT-1:客户端发送连接中断请求后进入FIN-WAIT-1状态,等待服务端的确认;
FIN-WAIT-2:客户端接收到服务端的终端确认后进入FIN-WAIT-2状态,等待服务端的中断请求;
CLOSE-WAIT:服务端在确认客户端的中断请求后,进入CLOSE-WAIT状态,等待从本地用户发来的连接中断请求;
LAST-ACK:服务端向客户端发送连接中断请求后进入LAST-ACK状态,等待来自客户端的中断请求确认;
TIME-WAIT:客户端发送中断请求确认后进入TIME-WAIT状态,等待足够的时间(2MSL)以确保服务端接收到来自客户端的中断请求确认; 
CLOSED:四次挥手结束后,客户端和服务端进入连接断开状态。

为了便于理解TCP建立连接的三次握手和断开连接的四次挥手过程中,涉及到的状态,附上两张便于理解的示意图。 三次握手:

在这里插入图片描述
在这里插入图片描述

四次挥手:

在这里插入图片描述
在这里插入图片描述

(2)Active UNIX domain sockets Active UNIX domain sockets,称为活跃Unix域套接字。 Proto显示连接使用的协议; RefCnt表示使用数量,即通过此套接字连接的进程数; Flags显示的标志为SO_ACCEPTON(显示为 ACC)、SO_WAITDATA(W)或SO_NOSPACE(N)。如果相应的进程等待一个连接请求,那么SO_ACCECPTON用于未连接的套接字。其它标志通常并不重要。 Types显示套接口的类型,一般为DGRAM(数据报)、STREAM(数据流); State显示套接字当前的状态,此字段包含以下关键字之一:

FREE:套接字未分配。
LISTENING:套接字正在监听一个连接请求。除非设置 --listening (-l) 或者 --all (-a) 选项,否则不显示。
CONNECTING:套接字正要建立连接
CONNECTED:套接字已连接
DISCONNECTING:套接字已断开
(empty):套接字未连

I-Node表示套接字的Inode节点号; Path表示套接字所在路径。

3.命令格式

netstat [<options>]

4.选项说明

-a,--all:显示所有连接和监听端口
-A <family>,--protocol=<family>:列出指定地址族的连接信息。family为逗号分隔的地址族关键字列表,比如inet,inet6,unix,ipx,ax25,netrom,econet和ddp等
-c,--continuous:每隔1s刷新网络状态
-C:从路由缓存获取路由信息
-e,--extend:显示网络其他相关信息
-F:显示FIB中的路由信息。(这是默认的选项) 
-g,--g:显示IPv4和IPv6的多播组成员关系信息
-h,--help:在线帮助
-i,-I=<iface>,--interfaces=<iface>:显示所有网络接口列表或者是指定的iface
-l,--listening:显示监听中的套接字(这是默认选项)
-M,--masquerade:显示伪装的网络连线
-n,--numeric:显示数字形式地址而不是去解析主机、端口或用户名
-N,--netlink,--symbolic:显示网络硬件外围设备的符号连接名称
-o,--timers:显示计时器; 
-p,--programs:显示正在使用Socket的进程ID和进程名
-r,--route:显示内核路由表。命令route -e会产生同样的结果
-s,--statistice:显示每种协议的统计信息
-t,--tcp:显示TCP传输协议的连接状况
-u,--udp:显示UDP传输协议的连接状况
-v,--verbose:显示指令执行过程。特别是打印一些关于未配置地址族的有用信息
-V,--version:显示版本信息
-w,--raw:显示RAW传输协议的连接状况
-x,--unix:此参数的效果和指定"-A unix"参数相同
--ip,--inet:此参数的效果和指定"-A inet"参数相同

5.常用示例

(1)列出所有端口信息(包括监听和未监听的)。 (a)列出所有端口

# netstat -a | more
 Active Internet connections (servers and established)
 Proto Recv-Q Send-Q Local Address           Foreign Address         State
 tcp        0      0 localhost:30037         *:*                     LISTEN
 udp        0      0 *:bootpc                *:*
 
Active UNIX domain sockets (servers and established)
 Proto RefCnt Flags       Type       State         I-Node   Path
 unix  2      [ ACC ]     STREAM     LISTENING     6135     /tmp/.X11-unix/X0
 unix  2      [ ACC ]     STREAM     LISTENING     5140     /var/run/acpid.socket

(b)列出所有tcp端口

netstat -at

(c)列出所有udp端口

netstat -au

(2)列出所有处于监听状态的Sockets。 (a)只显示监听端口

# netstat -l
 Active Internet connections (only servers)
 Proto Recv-Q Send-Q Local Address           Foreign Address         State
 tcp        0      0 localhost:ipp           *:*                     LISTEN
 tcp6       0      0 localhost:ipp           [::]:*                  LISTEN
 udp        0      0 *:49119                 *:*

(b)只列出所有监听tcp端口

netstat -lt

(c)只列出所有监听udp端口

netstat -lu

(d)只列出所有监听UNIX端口

netstat -lx

(3)显示每个协议的统计信息。 (a)显示所有端口的统计信息。

# netstat -s
 Ip:
 11150 total packets received
 1 with invalid addresses
 0 forwarded
 0 incoming packets discarded
 11149 incoming packets delivered
 11635 requests sent out
 Icmp:
 0 ICMP messages received
 0 input ICMP message failed.
 Tcp:
 582 active connections openings
 2 failed connection attempts
 25 connection resets received
 Udp:
 1183 packets received
 4 packets to unknown port received.
 .....

(b)显示TCP端口的统计信息。

netstat -st 

(c)显示UDP端口统计信息。

netstat -su

(4)在netstat输出中显示进程IDP和名称使用netstat -p,-p选项可以与其它选项一起使用,可以添加“PID/进程名称”到netstat输出中,这样在debugging 的时候可以很方便的发现特定端口运行的程序。

Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 10.234.178.144:43538    100.113.169.225:31415   ESTABLISHED -                   
tcp        0      0 10.234.178.144:33295    10.121.151.35:sd        ESTABLISHED 5354/VipMQAgent     
tcp        0      0 10.234.178.144:21095    100.92.40.70:bacula-dir ESTABLISHED 25164/pgg_login_cme

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

# netstat -n
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 10.234.178.144:43538    100.113.169.225:31415   ESTABLISHED
tcp        0      0 10.234.178.144:33295    10.121.151.35:9876      ESTABLISHED

如果只是不想让这三个名称中的一个被显示,使用以下命令

netsat -a --numeric-ports
netsat -a --numeric-hosts
netsat -a --numeric-users

(6)持续输出 netstat 信息。netstat -c将每隔一秒输出网络信息。

netstat -c

(7)显示系统不支持的地址族 (Address Families)。

netstat --verbose

在输出的末尾,会有如下的信息

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.

(8)显示核心路由信息。

# netstat -r
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         0.0.0.0         0.0.0.0         U         0 0          0 tunnat
9.0.0.0         10.175.82.193   255.0.0.0       UG        0 0          0 eth1
10.0.0.0        10.175.82.193   255.0.0.0       UG        0 0          0 eth1

注意:使用netstat -rn显示数字格式,不查询主机名称。 (9)找出程序运行的端口。并不是所有的进程都能找到,没有权限的会不显示,使用 root 权限查看所有的信息。

# netstat -anp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 10.175.82.204:61795     0.0.0.0:*               LISTEN      22006/./spp_pgg_dia 
tcp        0      0 10.175.82.204:55011     0.0.0.0:*               LISTEN      3228/./spp_pgg_vod_ 
tcp        0      0 10.175.82.204:10883     0.0.0.0:*               LISTEN      125115/./spp_pgg_co

(10)显示网络接口列表。

# netstat -i
Kernel Interface table
Iface      MTU    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
eth1      1500 32898847246      0      0 51410  34664370715      0      0      0 BMRU
lo       65536 57852071211      0      0 0      57852071211      0      0      0 LRU
tunnat    1480        0      0      0 0      103182603      0      0      0 OPRU

显示详细信息,可以使用ifconfig或者netstat -ie。

# netstat -ie
Kernel Interface table
eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.175.82.204  netmask 255.255.255.192  broadcast 10.175.82.255
        ether ec:f4:bb:e3:5b:b1  txqueuelen 10000  (Ethernet)
        RX packets 32900073183  bytes 21958447410400 (19.9 TiB)
        RX errors 0  dropped 0  overruns 51410  frame 0
        TX packets 34665611337  bytes 7109591105017 (6.4 TiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device memory 0x91d00000-91e00000
...

(11)IP和TCP分析。 (a)查看本机连接的服务端口中连接数TOP的服务端IP。其中10.234.178.144:22为本地IP端口。

netstat -ant | grep "10.234.178.144:22" |awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -10
     24 100.112.141.208
      2 10.63.93.159
      2 10.191.131.38
      2 10.101.242.11
      2 100.92.40.70
      2 100.113.141.219
      2 100.112.159.163
      1 9.68.178.53
      1 10.191.134.83
      1 10.139.233.47

第二列为服务端IP,左边是本地发起的连接数。 (b)查看TCP各种状态列表。

# netstat -ant | awk '{print $6}' | sort | uniq
CLOSE_WAIT
established)
ESTABLISHED
Foreign
LISTEN
TIME_WAIT

(12)显示多播组信息。

# netstat -g
IPv6/IPv4 Group Memberships
Interface       RefCnt Group
--------------- ------ ---------------------
lo              1      all-systems.mcast.net
eth1            1      all-systems.mcast.net
tunnat          1      all-systems.mcast.net
lo              1      ff02::1
lo              1      ff01::1
eth0            1      ff02::1
eth0            1      ff01::1
eth1            1      ff02::1

netstat的大部分功能都介绍了,如果想知道netstat更高级的功能,阅读它的手册吧(man netstat)。


参考文献

[1]netstat manual [2]netstat.linux命令在线中文手册 [3]Linux netstat命令详解 [4]Linux命令之netstat [5]TCP的三次握手与四次挥手(详解+动图)

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年02月01日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.简介
  • 2.输出结果整体说明
  • 3.命令格式
  • 4.选项说明
  • 5.常用示例
  • 参考文献
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档