![ICMP阻断测试](https://linux22.com/image/1318377/ICMP%E9%98%BB%E6%96%AD%E6%B5%8B%E8%AF%95.png)
在我的 bash 脚本中我一直在使用类似的东西:
until fping -u google.com; do echo "$0[$$] Network/DNS down?? $(date)" 1>&2 && sleep $(($RANDOM%(1 + ++trynum * 1) +1)).222; done
测试在线连接。
它会停下来,以随机间隔不断休眠,直到它可以再次 ping google.com。
问题:在某些 LAN 上,ICMP ping 被完全阻止,但网页仍可访问。针对这种一般情况(防火墙到外部)的简短测试方法是什么?
基于该测试,我将切换到基于 http 的测试,例如退出状态
curl -s google.com >/dev/null
如果那是好的。
答案1
使用 curl 相当浪费带宽。只需使用tcp连接反而。
如果您没有,还有其他选择:
curl -sI -m 2 http://www.google.com >/dev/null
echo 'HEAD / HTTP/1.0\r\nHost: www.google.com\r\n\r\n' | nc www.google.com 80 >/dev/null
基本思想是建立与端口 80 的 TCP 连接并查看是否成功。
答案2
如果某个服务器阻止了 ICMP 请求,您仍然可以通过短端口扫描检查 Web 服务器是否可访问,例如使用nmap:
nmap -PN -T4 -p 80 your_webserver 2>&1 | grep -wi open >/dev/null || date