Linux下查看当前哪些端口在监听状态,哪些端口在连接状态
一、查看监听端口
方法1:使用 ss 命令(推荐)
# 查看所有监听端口
ss -l
# 查看所有监听端口(显示端口号而非服务名)
ss -ln
# 查看所有TCP监听端口
ss -ltn
# 查看所有UDP监听端口
ss -lun
# 查看所有监听端口及其对应进程
ss -lntp
# 常用组合:显示TCP监听端口+进程信息
ss -lntp
输出示例:
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1234,fd=3))
LISTEN 0 128 127.0.0.1:631 0.0.0.0:* users:(("cupsd",pid=567,fd=7))
LISTEN 0 511 *:80 *:* users:(("nginx",pid=890,fd=6))
方法2:使用 netstat 命令(传统方式)
# 查看所有监听端口
netstat -l
# 查看所有监听端口(数字形式显示)
netstat -ln
# 查看TCP监听端口
netstat -ltn
# 查看UDP监听端口
netstat -lun
# 查看监听端口+进程信息
netstat -lntp
方法3:使用 lsof 命令
# 查看所有监听端口
lsof -i -P -n | grep LISTEN
# 查看指定端口的监听情况
lsof -i :80
二、查看连接状态
方法1:使用 ss 命令(推荐)
# 查看所有连接
ss -a
# 查看所有TCP连接
ss -at
# 查看所有TCP连接(数字形式,不解析服务名)
ss -atn
# 查看已建立的连接
ss -n state established
# 查看特定状态的连接
ss -n state syn-sent
ss -n state syn-recv
ss -n state time-wait
ss -n state close-wait
# 查看连接及其进程信息
ss -atnp
输出示例:
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
ESTAB 0 0 192.168.1.100:22 192.168.1.200:54321 users:(("sshd",pid=2345,fd=4))
TIME-WAIT 0 0 192.168.1.100:80 192.168.1.50:12345
ESTAB 0 0 192.168.1.100:3306 192.168.1.100:45678 users:(("mysqld",pid=789,fd=10))
方法2:使用 netstat 命令
# 查看所有连接
netstat -a
# 查看所有TCP连接
netstat -at
# 查看所有TCP连接(数字形式)
netstat -atn
# 查看所有UDP连接
netstat -au
# 查看连接+进程信息
netstat -atnp
# 查看特定状态的连接
netstat -an | grep ESTABLISHED
netstat -an | grep TIME_WAIT
netstat -an | grep SYN
三、常用命令参数说明
| 参数 | 说明 |
|---|---|
-l |
显示监听状态的端口 |
-t |
显示TCP端口 |
-u |
显示UDP端口 |
-n |
以数字形式显示地址和端口(不解析服务名) |
-p |
显示进程信息(需要root权限) |
-a |
显示所有连接(包括监听和非监听) |
四、TCP连接状态说明
| 状态 | 说明 |
|---|---|
| LISTEN | 等待连接请求 |
| SYN-SENT | 发送连接请求后等待匹配的连接请求 |
| SYN-RECEIVED | 收到和发送连接请求后等待确认 |
| ESTABLISHED | 连接已建立,数据传输中 |
| FIN-WAIT-1 | 等待远程TCP连接中断请求确认 |
| FIN-WAIT-2 | 等待远程TCP连接中断请求 |
| CLOSE-WAIT | 等待本地用户中断连接 |
| CLOSING | 等待远程TCP连接中断请求确认 |
| LAST-ACK | 等待原来发往远程TCP连接中断请求的确认 |
| TIME-WAIT | 等待足够时间确保远程TCP收到中断请求确认 |
| CLOSED | 连接已关闭 |
五、实用技巧
1. 统计各状态连接数
ss -atn | awk 'NR>1 {print $1}' | sort | uniq -c | sort -rn
# 输出示例:
# 45 ESTAB
# 12 TIME-WAIT
# 5 LISTEN
2. 查看占用端口最多的进程
ss -atnp | awk '{print $7}' | sort | uniq -c | sort -rn | head
3. 查看指定端口详情
ss -tlnp | grep :80
# 或
lsof -i :80
4. 查看连接数最多的IP
ss -atn | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head
总结
| 需求 | 推荐命令 |
|---|---|
| 查看监听端口 | ss -ltn |
| 查看监听端口+进程 | ss -ltnp |
| 查看所有连接 | ss -atn |
| 查看已建立连接 | ss -n state established |
| 统计连接状态 | ss -atn | awk 'NR>1 {print $1}' | sort | uniq -c |
💡 建议:现代Linux发行版推荐使用
ss命令,它比netstat更快,因为ss直接从内核获取信息,而netstat需要读取/proc文件系统。

浙公网安备 33010602011771号