netcat 및 명명된 파이프를 사용한 브리징/터널링

netcat 및 명명된 파이프를 사용한 브리징/터널링

서버(S)를 통해 간접적으로 서로 통신하도록 되어 있는 두 개의 장치(A와 B)가 있습니다.

/---\       /---\       /---\
| A | <===> | S | <===> | B |
\---/       \---/       \---/

A와 B는 독립적으로 S에 연결, 연결 해제 및 다시 연결할 수 있습니다.

내 접근 방식은 명명된 파이프를 버퍼로 사용하고 두 개의 netcat 인스턴스를 사용하여 A와 B에 대한 포트를 열고 수신된 콘텐츠를 한 파이프에 저장한 다음 다른 파이프에서 다시 콘텐츠를 보내는 것이었습니다.

다음 명령을 사용하여 실행합니다.

mkfifo a2b
mkfifo b2a
nc -n -u -lkvp 5050 < b2a | tee a2b &
nc -n -u -lkvp 5051 < a2b | tee b2a &

옵션 설명:

  • -n: 네임서버 가용성 문제 방지
  • -u: UDP 사용
  • -l: 듣기 시작
  • -k: 연결이 끊어진 후에도 계속 열려 있습니다.
  • -v: 장황하다
  • | tee fifo: 수신된 문자를 stdout으로 출력하고 쓰기fifo

A와 연결 S:5050하고 B와 연결하여 S:5051(예: nc -uv S 5050A의 경우) 일부 문자를 보내면 해당 문자가 S의 출력에 나타나지만 B에서는 수신되지 않습니다(그 반대의 경우도 마찬가지).

내가 뭘 잘못했나요?

내가 달성하려는 목표에 대한 올바른 용어는 무엇입니까? 브리징, 터널링, 전달, 중계입니까?

관련 정보