在 Linux 上检查网络联通性

2025-07-10#Linux#Network#网络工具

检查网络联通性是云工程师在排查问题时一个常见操作。通常,服务器都是受限的环境,可能无法安装网络工具,因此需要因地制宜,找到合适的工具和方法。以下介绍几种。

Netcat 🔗

使用 Netcat 可以检查远程服务器的端口是否打开,以此可以检查网络联通性。比如:

nc -zvw10 ip port

但是服务器上,尤其是在哪些用于运行应用的 Docker 容器,通常不会安装 Netcat。

在 Ubuntu 和 Debian 服务器上,可使用如下命令安装 Netcat:

apt-get update && apt -y install netcat-openbsd

/dev/tcp 🔗

使用 bash 中的特殊文件 /dev/tcp, 结合 echotimeout 命令,可检测网络连通性,但只能监测 TCP 连接。用法如下:

timeout 1 bash -c "echo > /dev/tcp/host/port" && echo ok || echo fail

这里的 host 可以是 IP 或者域名。比如:

timeout 1 bash -c "echo > /dev/tcp/github.com/443" && echo ok || echo fail

尽管 /dev/ucp/host/port 也是一个特殊文件。但基于 UDP 协议本质,写入该文件其实是发一个 UDP 包,没有返回值不能判断端口是否开放,也不适合做“端口检测”。

ping 🔗

ping 是常见的检测网络联通性的工具,但只能用于检测 ICMP 协议,不能用于检测端口是否开放。如果主机或其网络设备禁止了 ICMP Echo 请求,那么 ping 命令将无法检测到主机是否可达,但这并不一定表示主机离线或端口不可访问。