Socat - é possível?

Socat - é possível?

Existe alguma maneira de ouvir e executar um comando (para cada conexão) durante o encaminhamento de porta com socat? Um exemplo que não funciona para deixar mais claro:

socat TCP-LISTEN:8080,reuseaddr, "exec:ls" fork tcp:localhost:80

Responder1

Assim?

socat tcp-listen:8080,reuseaddr,fork system:'ls; exec socat - tcp\:localhost\:80'
  • O primeiro parâmetro deve ,forkficar socatouvindo mais conexões

  • system:é preferível exec:ter um interpretador de shell e executar facilmente um comando adicional após o lscomando,

  • que é um novo socatcomando

    que terá stdin/stdout conectado à saída/entrada do cliente remoto e o encaminhará bidirecionalmente novamente para o próximo destino. Observe que seu :separador (e alguns outros caracteres especiais) deve ter um escape para \não confundir oprimeiro socatcomando. Se esta linha se tornar mais complexa, será mais fácil simplesmente executar um script como este:

    socat tcp-listen:8080,reuseaddr,fork exec:/path/to/myscript.sh
    

    com /path/to/myscript.sh:

    #!/bin/sh
    ls
    exec socat - tcp:localhost:80
    

    execno comando shell é opcional, mas evita sair inutilmente do shell.

socattambém exporta algumas variáveis ​​próprias que podem ser reutilizadas no script, que você poderia verificar por exemplo assim (com uma conexão feita):

$ 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

informação relacionada