一、简介
netstat 命令是一个监控 TCP / IP 网络的非常有用的工具,它可以显示路由表、实际的网络连接、查看端口以及每一个网络接口设备的状态信息。
二、参数语法选项
参数 | 说明 |
---|---|
-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”参数相同 |
三、输出结果说明
当我们输入命令会显示以下信息
[root@master home]# netstat -a
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
.....
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags Type State I-Node Path
.....
netstat的输出结果可以分为两个部分:
- Active Internet connections,称为有源TCP连接,其中”Recv-Q”和”Send-Q”指%0A的是接收队列和发送队列。这些数字一般都应该是0。如果不是则表示软件包正在队列中堆积。这种情况只能在非常少的情况见到。
- Proto:连接使用的协议
- Recv-Q:单位是字节,是表示程序总共还有多少字节的数据没有从内核空间的套接字缓存拷贝到用户空间
- Send-Q:单位是字节,表示远程主机还没有接收到的数据量。发送队列Send-Q不能很快的清零,可能是有应用向外发送数据包过快,或者是对方接收数据包不够快
- Local Address:本地主机名和端口号
- Foreign Address:远程主机名和端口号
- State:链路状态,共有12种状态。
- Active UNIX domain sockets,称为有源Unix域套接口(和网络套接字一样,但是只能用于本机通信,性能可以提高一倍)。
- Proto:连接使用的协议
- RefCnt:表示连接到本套接口上的进程号
- Type:显示套接字的类型
- State:显示套接字当前的链路状态
- I-Node:节点编号
- Path:连接到套接字的其它进程使用的路径名
1、Proto:协议名
协议包含 tcp、tcp6、udp 、udp6 等。
2、recv-Q:网络接收队列
表示收到的数据已在本地接收缓冲,但是还有多少没有被进程取走,recv()。如果接收队列Recv-Q一直处于阻塞状态,可能是遭受了拒绝服务 denial-of-service 攻击。
3、send-Q:网路发送队列
对方没有收到的数据或者说没有Ack的,还是本地缓冲区.
如果发送队列Send-Q不能很快的清零,可能是有应用向外发送数据包过快,或者是对方接收数据包不够快。
recv-Q、send-Q这两个值通常应该为0,如果不为0可能是有问题的。packets在两个队列里都不应该有堆积状态。可接受短暂的非0情况。
4、Local Address :本地地址
127.0.0.1:port
表示只能本机访问的端口,外网无法访问,如127.0.0.1:8080:表示监听本机IPv4的loopback地址的8080端口。如果某个服务只监听了回环地址,那么只能在本机进行访问,无法通过tcp/ip 协议进行远程访问 。- 类似的 ::1:port 对应IPv6,如“::1:9000”:表示监听IPv6的回环地址的9000端口,::1这个表示IPv6的loopback地址。
0.0.0.0:port
表示对外开放的IPv4端口,外网可访问。:::port
表示对外开放的IPv6端口,外网可访问,::: 这三个冒号:中,前两个”::”是“0:0:0:0:0:0:0:0”的缩写~,表示IPv6的”0.0.0.0”,第三个冒号:是IP和端口的分隔符
5、Foreign Address:外部地址
与本机端口通信的外部socket,
显示规则与 Local Address 相同,
一般都是0.0.0.0:(IPv4)和:::(IPv6)。
6、State: 状态
链路状态,共有11种。state列共有12中可能的状态,前面11种是按照TCP连接建立的三次握手和TCP连接断开的四次挥手过程来描述的。
状态参数主要有:
LISTEN
:首先服务端需要打开一个socket进行监听,状态为LISTEN。来自远方TCP端口的连接请求SYN_SENT
:客户端通过应用程序调用connect进行active open。于是客户端tcp发送一个SYN以请求建立一个连接,状态置为SYN_SENT。在发送连接请求后等待匹配的连接请求SYN_RECV
:服务端应发出ACK确认客户端的 SYN,同时自己向客户端发送一个SYN,状态置为SYN_RECV。在收到和发送一个连接请求后等待对连接请求的确认ESTABLISHED
:代表一个打开的连接,双方可以进行或已经在数据交互了。代表一个打开的连接,数据可以传送给用户FIN-WAIT-1
:主动关闭(active close)端应用程序调用close,于是其TCP发出FIN请求主动关闭连接,之后进入FIN_WAIT1状态。等待远程TCP连接中断请求,或先前的连接中断请求的确认CLOSE-WAIT
:被动关闭(passive close)端TCP接到FIN后,就发出ACK以回应FIN请求(它的接收也作为文件结束符传递给上层应用程序),并进入CLOSE_WAIT。等待从本地用户发来的连接中断请求FIN-WAIT-2
:主动关闭端接到ACK后,就进入了 FIN-WAIT-2。从远程TCP等待连接中断请求LAST-ACK
:被动关闭端一段时间后,接收到文件结束符的应用程序将调用CLOSE关闭连接。这导致它的TCP也发送一个 FIN,等待对方的ACK,这就进入了LAST-ACK。等待原来发向远程TCP的连接中断请求的确认TIME-WAIT
:在主动关闭端接收到FIN后,TCP 就发送ACK包,并进入TIME-WAIT状态。等待足够的时间以确保远程TCP接收到连接中断请求的确认CLOSING
:比较少见。等待远程TCP对连接中断的确认CLOSED
:被动关闭端在接受到ACK包后,就进入了closed的状态。链接结束,没有任何连接状态UNKNOWN
:未知的Socket状态
状态参数补充:
SYN
:同步序列编号(Synchronize Sequence Numbers),该标志只在三次握手建立TCP连接时有效,表示一个新的TCP连接请求ACK
:确认编号(Acknowledgement Number),是对TCP请求的确认标志,同时提示对端系统已成功接收所有数据FIN:结束标志(Finish),用来结束一个TCP对话,但对应端口仍处于开放状态,等待接收后续数据
7、PID/Program: 进程id
PID即进程id,Program即使用该socket的应用程序
四、举个栗子
1、列出所有端口情况 -a
[root@master home]# netstat -a
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:nsesrvr 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:mysql 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:webcache 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:tproxy 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN
tcp 0 0 localhost:smtp 0.0.0.0:* LISTEN
tcp 0 0 iZ2zee7r7jat94g6t:49244 100.100.30.25:http ESTABLISHED
tcp 0 0 iZ2zee7r7jat94g6t1g:ssh 121.12.147.250:57501 ESTABLISHED
......
2、列出所有TCP端口 -at
[root@master home]# netstat -at
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:nsesrvr 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:mysql 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:webcache 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:tproxy 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN
tcp 0 0 localhost:smtp 0.0.0.0:* LISTEN
tcp 0 0 iZ2zee7r7jat94g6t:49244 100.100.30.25:http ESTABLISHED
tcp 0 0 iZ2zee7r7jat94g6t1g:ssh 121.12.147.250:57501 ESTABLISHED
tcp 0 0 iZ2zee7r7jat94g:nsesrvr 183.233.216.30:49256 ESTABLISHED
tcp 0 0 iZ2zee7r7jat94g6t1g:ssh 183.233.216.30:60157 ESTABLISHED
tcp 0 0 iZ2zee7r7jat94g6t:41704 100.100.18.120:https TIME_WAIT
tcp 0 0 iZ2zee7r7jat94g6t:41872 183.47.122.37:webcache ESTABLISHED
tcp6 0 0 [::]:mysql [::]:* LISTEN
tcp6 0 0 [::]:http [::]:* LISTEN
tcp6 0 0 [::]:webcache [::]:* LISTEN
tcp6 0 0 [::]:tproxy [::]:* LISTEN
tcp6 0 0 [::]:16343 [::]:* LISTEN
tcp6 0 0 [::]:afs3-fileserver [::]:* LISTEN
tcp6 0 0 localhost:smtp [::]:* LISTEN
tcp6 0 0 [::]:irdmi [::]:* LISTEN
3、列出所有UDP端口
[root@master home]# netstat -au
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
udp 0 0 0.0.0.0:bootpc 0.0.0.0:*
udp 0 0 localhost:323 0.0.0.0:*
udp6 0 0 localhost:323 [::]:*
4、列出所有处于监听状态的 Sockets
[root@yexindong ~]# netstat -l # 只显示监听端口
[root@yexindong ~]# netstat -lt # 显示监听TCP端口
[root@yexindong ~]# netstat -lu # 显示监听UDP端口
[root@yexindong ~]# netstat -lx # 显示监听UNIX端口
5、显示每个协议的统计信息
[root@yexindong ~]# netstat -s # 显示所有端口的统计信息
[root@yexindong ~]# netstat -st # 显示所有TCP的统计信息
[root@yexindong ~]# netstat -su # 显示所有UDP的统计信息
6、显示 PID 和进程名称
[root@yexindong ~]# netstat -p
7、显示核心路由信息
[root@yexindong ~]# 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
192.168.130.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
[root@yexindong ~]# netstat -rn # 显示数字格式,不查询主机名称
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 192.168.130.1 0.0.0.0 UG 0 0 0 eth0
192.168.130.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
8、查看端口和服务
8.1、查看所有进程的ip和端口 -n
netstat -an
8.3、查看占用80端口的tcp进程id
netstat -antp |grep 80
8.3、查看ssh进程
[root@master home]# netstat -ap | grep ssh
tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN 28783/sshd
tcp 0 0 iZ2zee7r7jat94g6t1g:ssh 121.12.147.250:57501 ESTABLISHED 23837/sshd: root@pt
tcp 0 0 iZ2zee7r7jat94g6t1g:ssh 183.233.216.30:60157 ESTABLISHED 5577/sshd: root@pts
unix 2 [ ] DGRAM 128627197 5577/sshd: root@pts
unix 3 [ ] STREAM CONNECTED 128640122 28783/sshd
unix 2 [ ] DGRAM 128336703 23837/sshd: root@pt