深色模式
端口与监听 ss -lntp
摘要:服务起来了但连不上?第一步不是猜,是用
ss看它到底监听在哪个地址、哪个端口。本文讲清ss -lntp各列含义与常见误区。
适用环境
bash
which ss || sudo apt install iproute2
sudo ss -V | head -11
2
2
操作步骤
1. 查看所有监听端口
bash
sudo ss -lntp
# -l 监听 -n 数字端口 -t TCP -p 显示进程1
2
2
2. 只看某个端口(如 80/443/3306)
bash
sudo ss -lntp '( sport = :80 )'
sudo ss -lntp | grep -E ':80|:443'1
2
2
3. 读懂关键列
text
LISTEN 0 128 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=1234,fd=6))
LISTEN 0 128 127.0.0.1:5432 0.0.0.0:* users:(("postgres",pid=998,fd=3))1
2
2
0.0.0.0:80:监听所有网卡,外部可访问127.0.0.1:5432:只监听本机回环,外部连不进来(常见于数据库)pid告诉你哪个进程占着端口
4. 确认端口被谁占用(冲突排错)
bash
sudo ss -lntp | grep ':8080'
# 若已被占用,换端口或停掉占用进程1
2
2
验证
bash
# 本机自连验证监听确实生效
curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1:80
# 再确认监听地址不是 127.0.0.1 才能被外部访问
sudo ss -lntp '( sport = :80 )'1
2
3
4
2
3
4
本机 200 + 监听为 0.0.0.0:80 = 外部可达;若监听 127.0.0.1 则外部访问会被拒。
常见坑
WARNING
netstat 已逐渐被废弃,新系统默认只有 ss。两者参数类似,但优先学 ss(来自 iproute2,更快更准)。
DANGER
把数据库/缓存(MySQL、Redis、PostgreSQL)误监听在 0.0.0.0 会直接暴露到公网,极易被入侵。生产上应只监听内网地址或 127.0.0.1 配合隧道访问。