
socat으로 포트를 전달하는 동안 (모든 연결에 대해) 명령을 듣고 실행할 수 있는 방법이 있습니까? 더 명확하게 하기 위한 작동하지 않는 예는 다음과 같습니다.
socat TCP-LISTEN:8080,reuseaddr, "exec:ls" 포크 tcp:localhost:80
답변1
이와 같이?
socat tcp-listen:8080,reuseaddr,fork system:'ls; exec socat - tcp\:localhost\:80'
첫 번째 매개변수는 더 많은 연결을 계속 수신
,fork
하도록 설정됩니다.socat
system:
exec:
쉘 해석기를 갖고 명령 다음에 추가 명령을 쉽게 실행하는 것 보다 선호됩니다ls
.이것은 새로운
socat
명령 이다이는 원격 클라이언트의 출력/입력에 stdin/stdout을 연결하고 이를 다시 다음 대상으로 양방향으로 전달합니다. 구분 기호
:
(및 기타 몇 가지 특수 문자)는\
혼동하지 않도록 a로 이스케이프해야 합니다.첫 번째socat
명령. 이 줄이 더 복잡해지면 다음과 같은 스크립트를 실행하는 것이 더 쉬워집니다.socat tcp-listen:8080,reuseaddr,fork exec:/path/to/myscript.sh
와 함께
/path/to/myscript.sh
:#!/bin/sh ls exec socat - tcp:localhost:80
exec
쉘 명령에서 선택 사항이지만 쉘 주변을 불필요하게 떠나는 것을 방지합니다.
socat
또한 스크립트에서 재사용할 수 있는 몇 가지 자체 변수를 내보냅니다. 예를 들어 다음과 같이 확인할 수 있습니다(연결이 이루어진 경우).
$ env - socat TCP-LISTEN:8080,reuseaddr,fork exec:printenv
SOCAT_PID=1057351
SOCAT_PPID=1057284
SOCAT_VERSION=1.7.4.1
SOCAT_SOCKADDR=127.0.0.1
SOCAT_SOCKPORT=8080
SOCAT_PEERADDR=127.0.0.1
SOCAT_PEERPORT=42970