socat의 sed 및 포트 전달?

socat의 sed 및 포트 전달?

이것이 여기에 속하는지, StackOverflow 또는 SuperUser인지 확실하지 않습니다.

역방향 텔넷 서버를 실행하는 장치가 있고 해당 장치로 데이터를 보내고 받을 수 있어야 합니다. 이와 같이 socat을 실행하고 telnet을 통해 포트 8002에 연결하면 사용할 수 있습니다.

sudo socat TCP-LISTEN:8001 TCP-LISTEN:8002

그러나 전송해서는 안 되는 정보를 보내므로 sed를 사용하여 데이터를 필터링하려고 합니다. 나는 이 통신이 양방향으로 유지되기를 원합니다. 즉, localhost:8002에서 텔넷에 입력하는 모든 내용은 localhost:8001로 전송되고 그 반대의 경우도 마찬가지입니다.

다음을 포함하는 bash 스크립트를 사용해 보았습니다.

#!/bin/bash
sed (my regex here) | socat - TCP-LISTEN:8002

그런 다음 다음을 실행하십시오.

sudo socat TCP-LISTEN:8001 SYSTEM:./replace.sh

그러나 이것은 텔넷 콘솔에 아무것도 출력하지 않습니다. 나도 EXEC:같은 것을 시도했지만 아무 일도 일어나지 않았습니다.

나는 심지어 시도했다:

sudo socat TCP-LISTEN:8001 "SYSTEM:'sed (my regex here)' || TCP-LISTEN:8002"

효과가 없습니다.

답변1

당신은 요점을 놓치고 있습니다 fork. 명령줄은 다음과 같습니다:

socat TCP-LISTEN:8002,fork SYSTEM:/path/to/replace.sh

/path/to/replace.sh 파일은 실행 권한을 갖고 다음과 같은 내용을 포함할 수 있습니다(이렇게 하면 모든 "a"가 "b"로 변경됩니다).

#!/bin/bash

sed -u 's/a/b/g'

sed를 사용하는 경우 -u(버퍼링되지 않은) 플래그를 추가하는 것이 중요합니다.

관련 정보