在 Linux 上检查网络联通性
检查网络联通性是云工程师在排查问题时一个常见操作。通常,服务器都是受限的环境,可能无法安装网络工具,因此需要因地制宜,找到合适的工具和方法。以下介绍几种。
Netcat 🔗
使用 Netcat 可以检查远程服务器的端口是否打开,以此可以检查网络联通性。比如:
nc -zvw10 ip port
但是服务器上,尤其是在哪些用于运行应用的 Docker 容器,通常不会安装 Netcat。
在 Ubuntu 和 Debian 服务器上,可使用如下命令安装 Netcat:
apt-get update && apt -y install netcat-openbsd
/dev/tcp
🔗
使用 bash 中的特殊文件 /dev/tcp
, 结合 echo
和 timeout
命令,可检测网络连通性,但只能监测 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
命令将无法检测到主机是否可达,但这并不一定表示主机离线或端口不可访问。