ncat 루프를 만들 수 있습니까?

ncat 루프를 만들 수 있습니까?

두 대의 컴퓨터가 있고 telnet, ssh 또는 기타 네트워크 도구를 사용하지 않고 ncat만 사용하여 다른 컴퓨터를 제어하고 쉘이 두 개만 있는 경우 어떻게 해야 합니까?

나는 세 가지 쉘을 사용하여 이 작업을 성공적으로 수행했습니다.

  1. cat | ncat 192.168.0.11
  2. ncat -l | bash | ncat 192.168.0.16
  3. ncat -l

한 ncat의 입력이 화면에 표시되고 쉘의 입력이 다른 ncat으로 파이프되는 쉘을 가질 수 있습니까?

지금까지 다음과 같은 문제가 발생했습니다.

  1. ncat이 데이터 전송을 시작하기 전에 다른 ncat이 이를 들어야 하기 때문에 ncat이 데이터를 전송하도록 강제하는 방법이 필요합니다.
  2. 그런 작업을 수행하면 ncat -l | cat | ncat 192.168.0.11데이터가 ncat 전송(원하지 않음)으로 되돌아가서 화면에 표시되지 않고(원함) 키보드 입력이 무시됩니다. 그것도 원하지 않습니다). 처음 두 가지 문제는 수신된 데이터를 어떤 방식으로든 stderr로 리디렉션하여 해결할 수 있지만 KB 입력을 어떻게 캡처합니까?

작동하는 한(fish, bash, zsh 등 무엇이든 가능) 어떤 쉘에서 이 작업을 수행할 수 있는지는 중요하지 않습니다.

심각한 상황은 아니고 그냥 궁금해서요.

답변1

명확하게 말하자면, 이 답변에서 "로컬"은 실행 중인 컴퓨터(1)를 의미하고 "원격"은 실행 중인 컴퓨터(2)를 의미합니다.

원격 컴퓨터에서 (2) ncat -e /bin/bash또는 ncat -c 'exec /bin/bash -i 2>&1';를 실행하지 않으면 (3)이 로컬로 필요하지 않습니다. 이러한 옵션은 무언가를 실행하고 표준 입력 및 표준 출력을 네트워크 연결에 연결하도록 특별히 설계되었습니다.

어쨌든 cat(1)은 필요하지 않다고 생각합니다. 로컬 컴퓨터에서는 밑창이 ncat 192.168.0.11작동해야 합니다.

이 솔루션은 원격 측에 tty를 할당하지 않습니다. 로컬로 입력하면 원격 셸이 터미널과 상호 작용을 시도하는 명령을 실행하도록 할 수 있습니다. 이러한 명령은 실패하지 않고 터미널을 찾게 되지만 이는 ncat(2)에서 호출된 터미널이 됩니다 . 반면, 표준 출력이나 표준 입력이 터미널이 될 것으로 예상하는 명령은 작동을 거부할 수 있습니다.

Ctrl또한 로컬 +가 c원격 측에 도달하여 거기에서 SIGINT를 올릴 것이라고 기대하지 마십시오 .

비교를 위해 ( ssh또는 sshd원격 측에서) tty를 할당할 수 있습니다. 원격 명령을 지정하지 않으면 기본적으로 이 작업과 그 이상을 수행합니다. 이는 로컬에서와 마찬가지로 원격 셸에서 대화형으로 작업할 수 있도록 수행됩니다. 우리 장치는 비슷한 일을 하지 않습니다.

관련 정보