Socat: ¿es posible?

Socat: ¿es posible?

¿Hay alguna forma de escuchar y ejecutar un comando (para cada conexión) mientras se reenvía el puerto con socat? Un ejemplo que no funciona para que quede más claro:

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

Respuesta1

¿Como esto?

socat tcp-listen:8080,reuseaddr,fork system:'ls; exec socat - tcp\:localhost\:80'
  • El primer parámetro debe ,forkpermanecer socatescuchando para más conexiones

  • system:Se prefiere exec:tener un intérprete de shell y ejecutar fácilmente un comando adicional después del lscomando.

  • que es un nuevo socatcomando

    que tendrá stdin/stdout conectado a la salida/entrada del cliente remoto y lo reenviará bidireccionalmente nuevamente al siguiente destino. Tenga en cuenta que su :separador (y algunos otros caracteres especiales) debe tener el carácter de escape a para \no confundir elprimero socatdominio. Si esta línea se vuelve más compleja, será más fácil ejecutar simplemente un script como este:

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

    con /path/to/myscript.sh:

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

    execen el shell el comando es opcional pero evita salir inútilmente por el shell.

socattambién exporta algunas variables propias que se pueden reutilizar en el script, que podrías verificar, por ejemplo, de esta manera (con una conexión realizada):

$ 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

información relacionada