您的位置:

了解netstat命令如何查看端口状态及作用

Netstat是Linux系统中常用的网络命令之一,主要用于查询网络状态和统计信息,能够通过此命令查看网络连接、路由表、网络接口等信息。特别是可以通过netstat命令查看端口状态和进程与端口之间的关系,实现网络故障排查和系统调优等功能。

一、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命令查看处于连接状态下的TCP端口
  •   $ 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命令查看端口的PID进程
  •   $ 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命令的多种作用。