0

基于这个答案,我试图找出一种从 telnet 退出并返回 0 的方法

这些不起作用:

(echo -e "repl.quit()";sleep 1) |telnet localhost 4242;echo $?
(echo -e "\029";sleep 1;echo "q";sleep 1) |telnet localhost 4242;echo $?
(echo -e "\c]";sleep 1;echo "q";sleep 1) |telnet localhost 4242;echo $?
(echo -e "\e]";sleep 1;echo "q";sleep 1) |telnet localhost 4242;echo $?
(echo -e "\E]";sleep 1;echo "q";sleep 1) |telnet localhost 4242;echo $?

问题是:我无法区分成功退出和失败退出......

我认为这个问题可以联系起来。

4

1 回答 1

3

您需要发送^]字符,这是一个不可打印的组分隔符,然后您的 telnet 客户端在执行您通过管道提供的所有命令后终止您的连接。大多数版本的echo程序都可以使用-e选项生成不可打印的字符。组分隔符是八进制的 035(您可以在 *nix 系统上查看整个 ASCII 表man 7 ascii。)。因此,整个命令应如下所示:

$ (echo "content.location.href = 'http://v4.ident.me/'"; sleep 2; echo -e '\035'; sleep 2) | telnet localhost 4242 > /dev/null
$ echo $?
$ 0
于 2014-06-21T17:34:51.477 回答