极简工具箱

免费在线工具 · 本地计算 · 无需上传

常用端口对照与「端口不通」的排查顺序

本地 `curl localhost:8080` 正常,外网就是连不上——大概率是服务只监听了 `127.0.0.1`,或者安全组没放行。

广告位(百度联盟)

一、常用端口对照

端口服务
22SSH
21FTP
25 / 465 / 587SMTP(发信)
53DNS
80 / 443HTTP / HTTPS
3306MySQL
5432PostgreSQL
6379Redis
27017MongoDB
9200 / 9300Elasticsearch
5672 / 15672RabbitMQ(服务 / 管理台)
8080 / 8000 / 3000常见应用端口
11211Memcached

0–1023 是系统端口,普通用户绑定需要 root 或 CAP_NET_BIND_SERVICE;1024–49151 是注册端口;49152 以上是动态端口。

二、查看谁占了端口

# Linux(推荐 ss,比 netstat 快)
ss -lntp | grep 8080
lsof -i :8080

# macOS
lsof -nP -iTCP:8080 -sTCP:LISTEN

# Windows
netstat -ano | findstr :8080
tasklist | findstr <PID>

输出里关注三件事:监听地址、进程 PID、进程名。ss 的 -p 需要 root 才能看到别人的进程。

三、127.0.0.1 与 0.0.0.0 的区别

这是「本地能访问、外网不行」的头号原因:

监听地址含义
127.0.0.1:8080只接受本机回环连接
0.0.0.0:8080接受所有网卡的连接
[::]:8080IPv6 全部地址(通常也包含 IPv4)
203.0.113.10:8080只监听该网卡

开发时为了安全常绑 127.0.0.1,部署到服务器忘了改,外部自然连不上。Nginx、Node、Python 的 --host 参数都有类似的默认值差异,部署时显式指定。

四、端口不通的排查顺序

从内到外,逐层验证:

  1. 进程在不在:ps aux | grep 服务名。
  2. 有没有监听:ss -lntp | grep 端口,看监听地址。
  3. 本机能不能连:curl -v http://127.0.0.1:端口/,telnet 127.0.0.1 端口。
  4. 本机内网 IP 能不能连:curl http://内网IP:端口/(排除只绑回环)。
  5. 防火墙:iptables -L -n、firewall-cmd --list-all、ufw status。
  6. 云安全组:控制台里入方向规则是否放行该端口(这是最容易被忘的一层)。
  7. 外层设备:SLB/负载均衡的健康检查、WAF 拦截。
  8. DNS/域名:确认解析到的是这台机器。

telnet 或 nc -zv host port 能快速判断「TCP 层通不通」。curl 报 Connection refused 说明端口没监听或被拒绝;Connection timed out 多半是防火墙/安全组丢弃。

五、端口冲突怎么办

# 找到占用进程并确认是什么
lsof -i :8080

# 正常停止
kill <PID>
# 不响应再强制
kill -9 <PID>

kill -9 会跳过清理逻辑,可能留下锁文件或未落盘数据,优先用 kill(SIGTERM)让进程优雅退出。

换端口是最简单的规避方式,但要注意:改完记得同步 Nginx 反代配置、防火墙规则、监控探针。

六、安全建议

七、快速核对

不确定某个端口对应什么服务,用 端口对照查询;确认域名解析到的 IP 是否正确用 域名/IP 检测;判断两台机器是否同网段用 CIDR 计算。

小结

ss -lntp 看监听,lsof -i :端口 看占用;127.0.0.1 只允许本机,对外要用 0.0.0.0;排查按「进程 → 监听 → 本机连通 → 防火墙 → 安全组」逐层验证。

本文相关工具(本地计算,无需上传)

更多使用教程