一、netstat命令的基本使用
在使用netstat命令进行端口状态查看前,首先需要了解netstat命令的基本用法,如下:
netstat [选项]
netstat命令有多种操作模式,可以通过选项选择不同的模式。其中,最常用的选项为:
- -a:显示所有socket,包括正在监听的和连接中的socket
- -n:以数字形式显示地址和端口号,而不通过域名和服务名
- -p:显示进程与socket之间的关系
- -t:显示TCP协议的socket
- -u:显示UDP协议的socket
下面是一些常用的netstat命令示例:
# 显示所有TCP和UDP端口的监听状态 netstat -a # 显示所有处于连接状态的TCP端口 netstat -at # 显示所有处于监听状态的TCP端口 netstat -lt # 显示本机处于TIME_WAIT状态的TCP端口 netstat -tan | grep TIME_WAIT # 显示指定端口的占用状态 netstat -lnp | grep 端口号
二、netstat命令查看端口状态
本节介绍使用netstat命令查看端口状态的相关内容,主要包括端口状态的定义、查看方法等。
1. 端口状态的定义
端口状态是指当前运行状态中,某个端口是否处于监听状态或连接状态,通常有五种状态,分别为:
- CLOSED:关闭状态,表明端口未被打开,未与其他端口建立连接
- LISTEN:监听状态,表明该端口正在等待连接请求
- SYN_SENT:表示已经发送连接请求,等待对应的连接确认
- SYN_RECV:表示已经接收到了连接请求并确认
- ESTABLISHED:已连接状态,表示该端口已经与远端端口建立了连接
2. 查看端口状态的方法
使用netstat命令查看端口状态的方法有以下几种:
- 使用netstat -a命令查看所有端口状态
$ netstat -a Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 *:ssh *:* LISTEN tcp 0 0 localhost.localdom:smtp *:* LISTEN tcp 0 0 localhost.localdoma:smtp *:* LISTEN tcp6 0 0 [::]:http [::]:* LISTEN tcp6 0 0 [::]:ssh [::]:* LISTEN tcp6 0 0 [::]:https [::]:* LISTEN udp 0 0 *:mdns *:* udp 0 0 *:bootpc *:* udp6 0 0 [::]:mdns [::]:*
结果中,Local Address表示本机的IP地址和端口号,Foreign Address表示远端主机的IP地址和端口号,State表示端口状态。
$ netstat -tan Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 127.0.0.1:38938 127.0.0.1:3306 TIME_WAIT tcp 0 0 127.0.0.1:38934 127.0.0.1:3306 TIME_WAIT tcp 0 0 127.0.0.1:38942 127.0.0.1:3306 TIME_WAIT tcp 0 0 127.0.0.1:38948 127.0.0.1:3306 TIME_WAIT tcp 0 176 127.0.0.1:57802 127.0.0.1:11211 ESTABLISHED tcp 0 0 127.0.0.1:44614 127.0.0.1:63414 TIME_WAIT tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
$ netstat -lnp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN 1824/mongod tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 1935/mysqld tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1384/sshd tcp6 0 0 :::80 :::* LISTEN 1631/apache2 tcp6 0 0 :::22 :::* LISTEN 1384/sshd
三、netstat命令的作用
netstat命令可以用于以下方面:
1. 端口扫描
通过扫描网络端口,可以确定服务是否开启,这是安全测试工程师经常使用的一种方法。
$ netstat -an | grep "LISTEN " tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN tcp6 0 0 :::22 :::* LISTEN tcp6 0 0 ::1:25 :::* LISTEN
2. 监控网络连接
通过查看网络连接,可以了解网络请求的情况,做出相应的网络优化。
$ netstat -an | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' CLOSED 91 FIN_WAIT2 1 TIME_WAIT 94 ESTABLISHED 68 SYN_RECV 5
3. 排查网络故障
通过查看网络端口和进程之间的关系,可以实现网络故障排查。
$ netstat -nlp | grep 80 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1631/apache2
四、总结
netstat命令是Linux系统中常用的网络命令之一,能够查看网络状态和统计信息,以及实现网络故障排查和系统调优等功能。本文主要介绍了netstat命令的基本使用和查看端口状态的相关内容,介绍了端口状态的定义、查看方法等,同时列举了netstat命令的多种作用。