
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
,fork
ficarsocat
ouvindo mais conexõessystem:
é preferívelexec:
ter um interpretador de shell e executar facilmente um comando adicional após ols
comando,que é um novo
socat
comandoque 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 oprimeirosocat
comando. 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
exec
no comando shell é opcional, mas evita sair inutilmente do shell.
socat
també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