소켓 서버를 시작하고 해당 소켓 포트에서 들어오는 요청을 다른 내부 포트로 전달하는 도구를 찾고 있습니다.
socat
나는 일반적으로 소켓 포트를 전달하는 것이 가능하다는 것을 발견했습니다 .
socat tcp-l:8080,fork,reuseaddr tcp:127.0.0.1:12345
그러면 "공식" 포트가 8080
내부 소켓 포트로 성공적으로 전달됩니다 12345
.
하지만 내 문제는 클라이언트가 포트에 연결할 수 있어야 한다는 것입니다.8080
심지어12345
현재 내부 포트를 사용할 수 없는 경우 .
socat의 문제점은 실제 소켓 서버를 생성하는 것 같지 않고 단지 포트를 다시 매핑하고 포트를 LISTENING 상태로 설정한다는 것입니다.
나는 클라이언트에게 "성공적으로 연결되었습니다. 입력 내용을 보내주십시오"라고 알려주는 도구를 찾고 있습니다. 내 로컬 포트를 12345
사용할 수 없는 경우 클라이언트에서 데이터를 보내려고 하면 오류가 발생합니다.
따라서 로컬 애플리케이션이 다운되더라도 클라이언트는 여전히 해당 공식 웹사이트에 연결할 수 있어야 합니다.
나만의 도구를 작성하지 않고도 이를 달성할 수 있습니까?
답변1
다음과 같이 시작할 수 있습니다.
socat tcp-l:8080,fork,reuseaddr \
SYSTEM:'nc -z 127.0.0.1 22 >/dev/null && exec nc 127.0.0.1 22 || echo "Fail!"'
tcp:127.0.0.1:12345
따라서 shell_fragment/script를 생성할 필요가 없습니다 .
Check, if 127.0.0.1 12345 responds
if yes, connect there and pass over the fds (exec)
if no, echo "Service@12345 is down"
Optional: don't exit, but enter a while loop
Try reaching port 12345, then connect eventually
선택적 부분의 경우 'echo "Fail!"을 다음으로 바꾸십시오.
{ echo "SomeMsg; MoreCommands; }
제가 도와드릴 수 있습니다. 조정하는 데 도움이 필요하면 문제가 있는 정보로 Q를 업데이트하세요.
답변2
ncat이 당신이 가야 할 곳으로 데려다 줄 것입니다. 포트에서 수신 대기하고 패킷을 받아들입니다. 예를 참조하세요:
ncat -l localhost 8080