使用 netcat 测试 UDP 端口的连通性

因为公司网络防火墙一般对端口会有一些限制,通过公司网络访问外部服务器特定端口时,需要检测与目标服务器特定端口的连通性;对于服务器可达性通常采用 ping 方法,tcp 可以使用 telnet, tcping 工具进行测试。对于 udp 连通性我们通常采用 netcat 工具进行测试。

netcat 安装

对于最小化安装的 Linux 服务器,默认通常不会安装 netcat 工具,需要自行安装。对于不同发行版本的 Linux 服务器安装方法略有差异。

对于 Debian / Ubuntu / Kali 等等发行版,可以使用 apt 命令进行安装

1
2
3

sudo apt install netcat-openbsd -y

💡 推荐安装 netcat-openbsd,比传统版更兼容。

对于 CentOS / AlmaLinux / Rocky / RHEL / Fedora 等等发行版,可以使用 apt 命令进行安装

1
2
3

sudo dnf install nmap-ncat -y

⚠️ RHEL 系列没有 netcat 包,改名为 nmap-ncat。

对于 Arch / Manjaro 等等发行版,可以使用 apt 命令进行安装

1
2
3

sudo pacman -S gnu-netcat

安装好后测试 UDP 连通性

服务端机器执行:

1
2
3

nc -u -l -p 9999

客户端机器执行:

1
2
3

echo "hello udp" | nc -u <服务端IP> 9999

若服务端屏幕输出 “hello udp” → UDP 连通正常。

如果想测试端口开放性(无输出也能判断)

1
2
3

nc -vz -u <目标IP> 53

1
2
3

Connection to 8.8.8.8 53 port [udp/domain] succeeded!

表示 UDP 端口 53 可达。

问题排查

如果需要定位连接在何处中断或被阻止,可以结合 tcpdump 工具进行排查。

在目标上抓包确认有没有收到客户端包

1
2
3
4
5

sudo tcpdump -n -i any udp and port 9999 -vv
# 或保存到文件用于分析:
sudo tcpdump -n -i any udp and port 9999 -w /tmp/udp9999.pcap

若 tcpdump 能看到来自你客户端的 UDP 包,但监听服务没有回复 -> 可能服务没有正确处理包或回复被防火墙拦截。

若 tcpdump 看不到包 -> 包在到达服务器前被丢弃(本地防火墙 / 云安全组 / 路由器 / ISP)。

参考文档

使用 netcat 测试 UDP 端口的连通性

https://pengtech.net/network/udp-connectivity-test.html

作者

鹏叔

发布于

2025-10-20

更新于

2025-10-21

许可协议

评论