netstat

netstat

前面我们学习了网络的有关基础知识,今天我们来介绍一个Linux下面的关于网络的一个重要指令——netstat.

功能说明

netstat是基于Netstat这个命令行工具的指令,它可以用来查询系统上的网络套接字连接情况,包括tcp,udp以及Unix套接字;另外它还能列出路由表,接口状态和多播成员等信息。

主要选项

关于netstat命令的选项有很多,这里我们只介绍常见选项,关于选项和选项的作用如下图:

netstat 命令

netstat 统计字段

[root@sdw3 ~]# netstat -anp
Active Internet connections (servers and established)
#协议                 本地地址                     外部地址                 状态        pik/程序名
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 172.16.10.235:28268         0.0.0.0:*                   LISTEN      65278/postgres      
tcp        0      0 0.0.0.0:6188                0.0.0.0:*                   LISTEN      20345/java          
tcp        0      0 172.16.10.235:40269         0.0.0.0:*                   LISTEN      64910/postgres      
tcp        0      0 0.0.0.0:37455               0.0.0.0:*                   LISTEN      2835/rpc.statd      
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      2706/rpcbind        
tcp        0      0 172.16.10.235:13872         0.0.0.0:*                   LISTEN      65166/postgres      
tcp        0      0 172.16.10.235:34000         0.0.0.0:*                   LISTEN      27257/postgres      
tcp        0      0 172.16.10.235:17809         0.0.0.0:*                   LISTEN      65288/postgres      
tcp        0      0 172.16.10.235:18449         0.0.0.0:*                   LISTEN      65272/postgres      
tcp        0      0 172.16.10.235:34001         0.0.0.0:*                   LISTEN      27251/postgres      
tcp        0      0 172.16.10.235:16275         0.0.0.0:*                   LISTEN      65268/postgres      
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      3042/sshd           
tcp        0      0 172.16.10.235:26327         0.0.0.0:*                   LISTEN      65274/postgres    

(1) 协议(TCP或UDP)

(2) 本地地址:在本地计算机和正在使用的端口号的 IP 地址。 如果不指定-n参数显示在本地计算机的 IP 地址相对应的名称和端口的名称。如果端口尚未建立,端口号显示为星号。

(3) 外部地址:套接字连接到远程计算机的 IP 地址和端口号。 如果不指定-n参数显示对应的 IP 地址和端口的名称。 如果端口尚未建立,端口号显示为星号。

(4) 状态:表示一个TCP连接的状态,可能的状态如下所示:

LISTENING:(Listening for a connection.) 侦听来自远方的TCP端口的连接请求

SYN-SENT:(Active; sent SYN. Waiting for a matching connection request after having sent a connection request.) 再发送连接请求后等待匹配的连接请求

SYN-RECEIVED:(Sent and received SYN. Waiting for a confirming connection request acknowledgment after having both received and sent connection requests.) 再收到和发送一个连接请求后等待对方对连接请求的确认

ESTABLISHED:(Connection established.) 代表一个打开的连接

FIN-WAIT-1:(Closed; sent FIN.) 等待远程TCP连接中断请求,或先前的连接中断请求的确认

FIN-WAIT-2:(Closed; FIN is acknowledged; awaiting FIN.) 从远程TCP等待连接中断请求

CLOSE-WAIT:(Received FIN; waiting to receive CLOSE.) 等待从本地用户发来的连接中断请求

CLOSING:(Closed; exchanged FIN; waiting for FIN.) 等待远程TCP对连接中断的确认

LAST-ACK:(Received FIN and CLOSE; waiting for FIN ACK.) 等待原来的发向远程TCP的连接中断请求的确认

TIME-WAIT:(In 2 MSL (twice the maximum segment length) quiet wait after close. ) 等待足够的时间以确保远程TCP接收到连接中断请求的确认

CLOSED:(Connection is closed.) 没有任何连接状态

有关TCP 连接的状态的详细信息,请参阅 RFC 793

(5) recv-Q 表示网络接收队列,Q是Queue的缩写

表示收到的数据已经在本地接收缓冲,但是还有多少没有被进程取走,recv()
如果接收队列Recv-Q一直处于阻塞状态,可能是遭受了拒绝服务 denial-of-service 攻击。

(6) send-Q 表示网路发送队列

对方没有收到的数据或者说没有Ack的,还是本地缓冲区.

如果发送队列Send-Q不能很快的清零,可能是有应用向外发送数据包过快,或者是对方接收数据包不够快。

这两个值通常应该为0,如果不为0可能是有问题的。packets在两个队列里都不应该有堆积状态。可接受短暂的非0情况。

实例演示

查看所有端口

netstat -a  

这条命令会列出所有的端口,包括监听的和未监听的。

查看tcp协议

netstat -t

列出所有的tcp协议的端口,结果如下:

[root@sdw3 ~]# netstat -at
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State      
tcp        0      0 *:6188                      *:*                         LISTEN      
tcp        0      0 sdw3:19598                  *:*                         LISTEN      
tcp        0      0 *:37455                     *:*                         LISTEN      
tcp        0      0 *:sunrpc                    *:*                         LISTEN      
tcp        0      0 sdw3:34000                  *:*                         LISTEN      
tcp        0      0 sdw3:34001                  *:*                         LISTEN      
tcp        0      0 sdw3:31474                  *:*                         LISTEN      
tcp        0      0 sdw3:14773                  *:*                         LISTEN      
tcp        0      0 sdw3:netmap_lm              *:*                         LISTEN      
tcp        0      0 *:ssh                       *:*                         LISTEN

查看udp协议

netstat -ua

同样,这条命令表示列出所有的UDP协议的端口。

查看程序运行的pid

netstat -ap | grep '程序名'

例如:

[root@sdw3 ~]# netstat -nap | grep 'rsyslog'
udp        0      0 0.0.0.0:514                 0.0.0.0:*                               2624/rsyslogd       
udp        0      0 :::514                      :::*                                    2624/rsyslogd

禁止域名解析

这个主要netstat中的-n选项有关,我们先来看看不带n时所输出的结果。

[root@sdw3 ~]# netstat -ap | grep 'rsyslog'
udp        0      0 *:syslog                    *:*                                     2624/rsyslogd       
udp        0      0 *:syslog                    *:*                                     2624/rsyslogd       
unix  12     [ ]         DGRAM                    15429  2624/rsyslogd       /dev/log

下面我们再来看看加上n 选项后的输入结果。

[root@sdw3 ~]# netstat -nap | grep 'rsyslog'
udp        0      0 0.0.0.0:514                 0.0.0.0:*                               2624/rsyslogd       
udp        0      0 :::514                      :::*                                    2624/rsyslogd

我们发现在local address 即主机地址这一栏中,如果没有带n选项,会将套接字所对应的域名解析出来,如果加上n选项,那么就不会显示,即禁止域名解析的功能,这样做有助于提高查询速度,因为减少了对主机域名的查询。

持续输出netstat信息

这个没有什么好说的,大家自己试一试指令即可。

netstat -c

显示路由表的信息

netstat -r

这条指令相当于route指令,会输出核心路由信息。

[root@sdw3 ~]# netstat -nr
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
172.16.10.0     0.0.0.0         255.255.255.0   U         0 0          0 eth4
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth4
0.0.0.0         172.16.10.1     0.0.0.0         UG        0 0          0 eth4

显示接口信息

netstat -i

分类统计各个协议的相关信息

netstat -sa
原文地址:https://www.cnblogs.com/binarylei/p/8434079.html