我想使用expect文件自动连接到telnet会话,流程是:
- 当我们连接到某个IP和端口时,它会显示
escape character is ]
- 之后我们必须给Ctrl+D
\x04
我写了一个发送Ctrl+的期望文件D。当我运行该文件时,连接很好,但希望我从键盘上给出Ctrl+ 。D但我希望它自动从脚本本身输入Ctrl+ 。D不应手动执行任何操作。
你能解释一下方法吗?
答案1
您可以在不使用expect shell的情况下自动退出telnet。
sleep <n> | telnet <server> <port>
n- 自动退出前的等待时间(以秒为单位)。它可以是小数,如 0.5。请注意,某些所需的输出可能不会在指定的等待时间内返回。所以我们可能需要相应增加。
服务器- 目标服务器 IP 或主机名。
港口- 目标服务端口号。
您还可以将输出重定向到文件,如下所示:
sleep 1 | telnet <server> <port> > output.log
答案2
我建议将转义字符更改为您可以更轻松地发送的字符expect
。例如,如果您知道自己没有发送感叹号,请将其用作转义字符:
$ telnet -e ! 10.1.2.3 80
Telnet escape character is '!'.
Trying 10.1.2.3...
Connected to 10.1.2.3.
Escape character is '!'.
GET!
telnet> quit
Connection closed.
答案3
您可以输入ctrl+ V, ctrl+D来获取期望脚本中的文字字节序列。 Expect 将发送此消息,就像您交互键入ctrl+一样D。