今天对 Homelab 中跑的一些存在隐私数据的服务添加 禁止访问互联网 的隐私策略来提高安全性。但大部分镜像都采用最小化方式打包的,没有常见的 ping, curl, wget, telnet 等网络工具来测试网络访问情况。
忘记之前在哪里看到过可以通过 Bash 中的 /dev/tcp
来发起网络请求,本文简单记录了如何使用 /dev/tcp
来测试网络的连接性。
/dev/tcp
和/dev/udp
是 Bash shell 提供的特殊文件,用于建立 TCP 和 UDP 连接。尽管它们看起来像文件,但实际上并不存在于你的文件系统中,也不会在你的/dev
目录中找到它们。它们是由 Bash 提供的虚拟文件,用于支持基于网络的 IO。当你使用
/dev/tcp/host/port
形式的文件名进行重定向操作时,Bash 会解析 host 和 port,并尝试建立一个到指定主机和端口的 TCP 连接。需要注意的是,这个特性是 Bash 特有的,其他的 Shell(比如 Dash)或者不同的操作系统可能并不支持 /dev/tcp 和 /dev/udp。
– From ChatGPT
以下脚本内容使用 /dev/tcp
来发起网络,行为类似 curl -X GET
。
#!/bin/bash
exec 3<>/dev/tcp/www.baidu.com/80
echo -e "GET / HTTP/1.1\r\nhost: www.baidu.com\r\nConnection: close\r\n\r\n" >&3
while IFS= read -r line
do
echo "$line"
done <&3
/dev/tcp
还支持传输文件、端口扫描等操作,可以参考: