我想在脚本[Linux:CentOS 7]中测试远程机器的可用性。虽然TCP包可以在途中被防火墙阻止,但ICMP包可能是可能的,并且不会被默认的防火墙设置阻止。因此,ping对我没有帮助
我尝试使用有限数量的跃点进行traceroute。但是我总是得到$?= 0的退出代码,即使在给定的跳数内没有达到目标,例如,
traceroute -T -p 1234 192.168.123.45 -w 1 -q 1 -m 5
所以,我正在寻找一种方法来获得CLI的正确错误'作为退出代码,如果无法通过TCP访问机器(对于给定的参数集)?
解决方案/复制
Cyrus指出Test from shell script if remote TCP port is open解决了我使用netcat的问题
当主机在tcp 上完全没有应答时,从tcp伪设备读取可能会阻塞
</dev/tcp/192.168.123.45/1234
因此,这仅适用于测试可访问主机上的端口。不幸的是,我发现无法从这样的伪设备读取可靠的超时(timeout -s4 2 </dev...
不起作用)
在大多数设置中都可以使用netcat,我现在要进行像
这样的检查nc -z -w 2 192.168.123.45 1234 && echo "host foo reachable on port bar" || echo "host foo not reachable on port bar"
两秒超时