Ubuntu netstat命令:查看网络连接状态

在Ubuntu系统中,我们经常需要查看网络连接状态、排查网络问题或了解系统当前的网络活动情况。这时候,netstat命令就派上用场了。它是一个强大的网络工具,能够显示系统中所有的网络连接、路由表、接口统计信息以及监听端口等关键网络数据。

一、安装netstat(如果需要)

Ubuntu默认可能未安装netstat命令,这是因为它属于net-tools工具包。如果执行netstat时提示“command not found”,请先安装:

sudo apt update && sudo apt install net-tools

二、netstat的基本语法

netstat的基本语法格式为:

netstat [选项] [协议/参数]

常用选项(参数)及作用如下,每个选项配合简单示例说明:

三、常用参数及示例

1. 显示所有连接(-a)

  • 作用:显示系统中所有的网络连接(包括TCP、UDP,已建立的、监听的、关闭的等)。
  • 命令netstat -a
  • 说明:输出内容较多,包含本地地址、外部地址、连接状态等。例如:
  Active Internet connections (servers and established)
  Proto Recv-Q Send-Q Local Address           Foreign Address         State
  tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN
  tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
  tcp        0      52 192.168.1.100:22        192.168.1.101:54321     ESTABLISHED

2. 只显示TCP协议连接(-t)

  • 作用:过滤出所有TCP协议的连接(忽略UDP等其他协议)。
  • 命令netstat -t
  • 说明:如果需要查看监听状态的TCP连接,可结合-l(监听)参数:netstat -tl

3. 只显示UDP协议连接(-u)

  • 作用:仅显示UDP协议的连接(常用于排查DNS、NTP等UDP服务)。
  • 命令netstat -u

4. 以数字格式显示端口和IP(-n)

  • 作用:不将IP地址解析为主机名,端口号解析为服务名(避免DNS查询延迟,输出更简洁)。
  • 命令netstat -tn(TCP)或netstat -un(UDP)
  • 说明:例如,端口80会显示为“80”而非“http”,IP地址显示为数字格式(如192.168.1.100)。

5. 显示进程ID和程序名(-p)

  • 作用:查看哪个进程占用了特定端口或连接(需root权限)。
  • 命令sudo netstat -tunp
  • 说明:普通用户执行时可能无法显示进程信息,需加sudo。例如:
  tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      1234/mysqld

这里1234/mysqld表示MySQL进程(PID 1234)占用了3306端口。

6. 显示路由表(-r)

  • 作用:查看系统的路由规则(决定数据包如何转发到其他网络)。
  • 命令netstat -r
  • 说明:常用于排查网络不通或路由配置问题。

四、实际应用场景

1. 快速查看所有监听端口

想知道系统哪些端口在监听连接(如Web服务的80端口、SSH的22端口):

sudo netstat -tuln
  • -t:TCP监听端口
  • -u:UDP监听端口
  • -l:监听状态
  • -n:数字格式
  • 输出示例
  Active Internet connections (only servers)
  Proto Recv-Q Send-Q Local Address           Foreign Address         State
  tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN
  tcp6       0      0 :::22                   :::*                    LISTEN
  udp        0      0 127.0.0.1:53            0.0.0.0:*

2. 排查特定端口是否被占用

例如,想确认80端口是否被Web服务器(如Apache)占用:

sudo netstat -tulnp | grep 80
  • 说明:若输出包含LISTEN状态,则说明80端口正被某个服务监听。

3. 查看已建立的TCP连接

想了解当前系统与外部设备的已建立连接(如远程服务器的SSH连接):

netstat -tan | grep ESTABLISHED
  • -a:所有连接
  • -n:数字格式
  • grep ESTABLISHED:只显示已建立连接状态

五、总结

netstat是Ubuntu网络管理的基础工具,掌握以下核心用法即可应对大部分场景:
- 查看监听端口:sudo netstat -tuln
- 查看端口占用进程:sudo netstat -tunp
- 查看TCP连接:netstat -tan(或结合grep过滤状态)
- 查看路由表:netstat -r

如果需要更详细的网络分析,还可以结合grepawk等工具进一步筛选数据。记住,使用-p参数时需加sudo获取进程信息,这是排查端口占用问题的关键步骤。

小夜