参考这个问题:使用 bash 脚本自动化 telnet 会话 https://stackoverflow.com/questions/7013137/automating-telnet-session-using-bash-scripts
我正在尝试捕获远程主机超时所需的时间。
假设是 10 秒。
用手,我可以启动time telnet host port
输入一些命令,然后不执行任何操作,10 秒后time
的输出将保留我需要的时间。
然而,在脚本中,问题是使用此解决方案:
{ echo "command"; } | time telnet host port
当管道结束时,它发送一个 EOF 并且 telnet 立即关闭。我可以通过添加一个来解决这个问题sleep n
作为我的最后一个管道命令,但随后所有内容都会因超时而挂起(这可能超过实际的服务器超时)。
只是为了解释我想要做什么,让我们借用谷歌的帮助。我希望我的时间输出为 5 分钟,这就是 Google 似乎使用的超时时间。反而:
{ echo "GET / HTTP/1.1"; echo "Host: www.google.com"; echo "Connection: keep-Alive"; echo ""; echo ""; } | time telnet www.google.com 80 2>&1
Gives 0
- 错误(EOF 立即发送)
{ echo "GET / HTTP/1.1"; echo "Host: www.google.com"; echo "Connection: keep-Alive"; echo ""; echo ""; sleep 10; } | time telnet www.google.com 80 2>&1
Gives 10
- wrong
{ echo "GET / HTTP/1.1"; echo "Host: www.google.com"; echo "Connection: keep-Alive"; echo ""; echo ""; sleep 1; } | time telnet www.google.com 80 2>&1
Gives 1
- wrong
{ echo "GET / HTTP/1.1"; echo "Host: www.google.com"; echo "Connection: keep-Alive"; echo ""; echo ""; sleep 900; } | time telnet www.google.com 80 2>&1
Gives 900
- 错误(这里我希望远程登录停止,因为远程主机发送了一个kill,但睡眠获胜)
那么,我该如何解决这个问题呢?谢谢!