내 Linux 시스템에서 세션을 열었습니다 Telnet
. 다른 탭에서는 스크립트를 실행하고 파일 리디렉션을 사용하여 Python
세션에 명령을 실행합니다. 하지만 내 스크립트를 통해 세션 키 누르기를 시뮬레이션할 수는 없습니다.Telnet
mkfifo
Telnet
Python
Telnet
세션 으로 리디렉션하려는 모든 명령은 다음과 같이 수행됩니다.
printf "ls" > my.fifo
하지만 + 같은 방법으로 어떻게 할 수 있나요 ctrl?c
사람들은 더 명확한 설명을 원했기 때문에 아래에 자세한 설명을 제공합니다.
그래서 탭에서 다음 명령을 사용하여 텔넷 세션을 열었습니다.
mkfifo my.fifo
cat >my.fifo &
cat my.fifo | telnet 182.23.45.12 10000 2>&1 | tee log.txt
이제 다른 탭에서 이 텔넷 프로세스에 명령을 내리는 Python 스크립트를 실행하고 있습니다. 내가하고있는 것printf "명령" > my.fifo.
하지만 텔넷 프로세스에 키 누르기 이벤트를 보내야 하는데 아래 명령으로는 보낼 수 없습니다.
printf "command" > my.fifo
설명: tty와 pts가 있습니다.
답변1
이것은 나에게 효과적입니다. 먼저, 더 이상 사용되지 않는 telnetd
관련 telnet
.
telnet
그런 다음 두 개의 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.