在我的 Linux 系统上我打开了一个Telnet
会话。在另一个选项卡上,我正在运行脚本并使用文件重定向Python
向会话发出命令。但我无法通过我的脚本模拟会话按键。Telnet
mkfifo
Telnet
Python
我尝试重定向到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。