模拟 Telnet 进程的击键

模拟 Telnet 进程的击键

在我的 Linux 系统上我打开了一个Telnet会话。在另一个选项卡上,我正在运行脚本并使用文件重定向Python向会话发出命令。但我无法通过我的脚本模拟会话按键。TelnetmkfifoTelnetPython

我尝试重定向到Telnet会话的每个命令都是这样完成的:

printf "ls" > my.fifo

但我怎样才能用同样的方式做ctrl+呢?c

人们想要更多的澄清,所以下面我给出详细的解释

所以在一个选项卡中我使用这些命令打开了 telnet 会话

mkfifo my.fifo
cat >my.fifo &
cat my.fifo | telnet 182.23.45.12 10000 2>&1 | tee log.txt

现在,在另一个选项卡中,我正在运行一个 python 脚本,该脚本向此 telnet 进程发出命令。我正在做的事情printf“命令”> my.fifo

但我需要向 telnet 进程发送一个按键事件,但我无法使用下面的命令来执行此操作

printf "command" > my.fifo

澄清: tty 和 pts 在那里。

答案1

这对我有用。首先,我安装了过时的telnetd和关联的telnet.

然后我创建了两个 FIFO(一个用于telnet命令的输入,另一个用于命令的输出)并启动了telnet进程子 shell。如果您不需要通过 FIFO 捕获输出,则可以忽略对输出 FIFO 的所有引用 ( $f1):

f1="$HOME/fifo1" f2="$HOME/fifo2"
mkfifo -m 600 "$f1" "$f2"

在另一个窗口(终端)中,我安排读取 FIFO 的输出:

while :; do echo READING:; cat "$f1"; done

在另一个窗口(终端)中,我向正在运行的telnet会话输入命令:

telnet localhost 2>"$f1" >"$f1" <"$f2"    # Attached stderr, stdout, stdin
exec 3>"$f2"                              # Hold open the FIFO

然后我登录了,

user=roaima    # Username
read pass      # Enter password here
( printf '%s\n' "$user"; sleep 1; printf '%s\n' "$pass" ) >"$f2"

然后我发送了一些命令

echo date >"$f2"
echo sleep 20 >"$f2"

然后我赶紧打断了sleep命令

printf '\003' >"$f2"

这是会话输出:

READING:
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Raspbian GNU/Linux 11
pi login: roaima
Password:
Linux pi 4.9.35-v7+ #1014 SMP Fri Jun 30 14:47:43 BST 2017 armv7l
[...]
pi:~$ date
Sat 11 Mar 11:57:15 GMT 2023
pi:~$ sleep 20
^C
pi:~$

正如你所看到的,它对我来说很有效。作为字符发送\003被服务器视为键盘中断Ctrl C

相关内容