我知道答案有点晚了,但是我一直在寻找方法,出于安全原因,不建议使用nc,因此可以帮助某人。
您最初的回声中缺少的是-e开关:
-e enable interpretation of backslash escapes
-E disable interpretation of backslash escapes (default)
和换行符+ quit命令在断开连接后退出telnet。因此:
echo -e '\035\nquit' | telnet 10.0.0.1 23 && echo "success" || echo "failed"
显然,如果您使用块样式的if语句并求值$ ?,同样的方法也会起作用。就像您最初所做的那样:
echo -e '\035\nquit' | telnet 10.0.0.1 23
if [ $? -eq 1 ]
then
echo "Console is down."
fi
就我们而言,就nc而言,这取决于您所拥有的nc风格(gnu ncat与nmap-ncat)。Gnu将具有-z开关:
-z Zero-I/O mode, report connection status only
nc -z 10.0.0.1 23
# (evaluate $? here)
而另一个则不会,您必须将一条空行传送到nc上以免被卡住:
echo | nc 10.0.0.1 23
# (evaluate $? here)