소켓 전달자를 서버로 만드는 방법은 무엇입니까?

소켓 전달자를 서버로 만드는 방법은 무엇입니까?

소켓 서버를 시작하고 해당 소켓 포트에서 들어오는 요청을 다른 내부 포트로 전달하는 도구를 찾고 있습니다.

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

관련 정보