
私の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
別のタブで、このTelnetプロセスにコマンドを発行するPythonスクリプトを実行しています。私がしていることprintf "コマンド" > my.fifo。
ただし、Telnetプロセスにキー押下イベントを送信する必要がありますが、以下のコマンドでは送信できません。
printf "command" > my.fifo
説明:ttyとptsがあります。
答え1
これは私にとって効果的です。まず、もはや使用されていないtelnetd
関連telnet
。
telnet
次に、2つのFIFO(コマンド入力用とコマンド出力用)を作成し、telnet
プロセスサブシェルを起動しました。 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"
その後、すぐに睡眠コマンドを中止しました。
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。