nc 端口探测
nc(netcat)常用于端口连通性探测:从客户端侧发起一次 TCP 连接,确认目标地址与端口能否建立连接。它只能回答「这一段路是否通」这一个问题,结论要完整还需要在服务端确认监听状态与防火墙放行情况。
基本信息
| TCP 探测 | nc -vz -w 3 10.0.0.2 8080 |
|---|---|
| UDP 探测 | nc -vuz -w 3 10.0.0.2 161 |
| 超时控制 | -w 指定秒数,避免长时间挂住 |
| 服务端核对 | ss -ltnp 'sport = :8080' |
| 结论边界 | TCP 握手成功只说明端口可达,不代表应用协议正常 |
典型使用场景
- 新增服务上线前确认端口在客户端侧可达
- 排查应用报「连接被拒绝」还是「连接超时」
- 验证防火墙规则调整后的放行效果
- 容器与宿主之间确认端口映射是否生效
- 变更后回归测试,确认端口访问未被切断
双向验证
双向验证
nc -vz -w 3 app.internal 8080 # 客户端侧探测 TCP 可达性
ss -ltnp 'sport = :8080' # 服务端核对监听地址与进程
nc -vuz -w 3 10.0.0.2 161 # UDP 探测,结论仅限 UDP 可达性
curl -sS -m 3 http://app.internal:8080/healthz # 用真实请求验证应用可用结果与含义
| 结果 | 含义 | 下一步 |
|---|---|---|
| succeeded | TCP 连接建立成功 | 继续验证应用协议层 |
| Connection refused | 目标端口没有监听或被拒绝 | 核对服务端监听与安全策略 |
| 超时无响应 | 报文被丢弃或路径不通 | 检查路由与中间设备策略 |
| UDP 无回显 | UDP 无连接,探测结果不确定 | 结合服务端抓包判断 |
排查顺序
- 先在服务端确认进程与监听地址是否正确
- 再从客户端侧探测,区分拒绝与超时
- 然后逐段检查安全组、防火墙与中间设备策略
- 最后用真实应用请求验证协议层是否正常
监听地址的差异会直接影响结果:只监听 127.0.0.1 的服务从外部永远不可达,而端口探测显示拒绝,容易被误判为防火墙问题。
UDP 是无连接协议,探测无法得到明确的成功或失败信号,结果只能作为参考,必须结合服务端抓包或应用日志判断。