Telnetプロセスのキー入力シミュレーション

Telnetプロセスのキー入力シミュレーション

私のLinuxシステムでセッションを開きましたTelnet。他のタブではスクリプトを実行し、ファイルリダイレクトを使用してPythonセッションにコマンドを実行します。しかし、私のスクリプトを使ってセッションキーを押すことをシミュレートすることはできません。TelnetmkfifoTelnetPython

Telnetセッションにリダイレクトするすべてのコマンドは、次のように実行されます。

printf "ls" > my.fifo

しかし、+同じ方法でどうすればよいですかctrlc

人々はより明確な説明を望んでいたので、以下に詳細な説明を提供します。

そのため、タブで次のコマンドを使用して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

おすすめ記事