Socat – ist das möglich?

Socat – ist das möglich?

Gibt es eine Möglichkeit, beim Port-Forwarding mit Socat zuzuhören und einen Befehl auszuführen (für jede Verbindung)? Ein nicht funktionierendes Beispiel zur Verdeutlichung:

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

Antwort1

So was?

socat tcp-listen:8080,reuseaddr,fork system:'ls; exec socat - tcp\:localhost\:80'
  • Der erste Parameter muss auf weitere Verbindungen ,forkwartensocat

  • system:exec:ist einem Shell-Interpreter vorzuziehen , mit dem man nach dem lsBefehl einfach einen weiteren Befehl ausführen kann,

  • Das ist ein neuer socatBefehl

    Dadurch wird stdin/stdout mit dem Ausgang/Eingang des Remote-Clients verbunden und dieser wird bidirektional an das nächste Ziel weitergeleitet. Beachten Sie, dass das :Trennzeichen (und einige andere Sonderzeichen) mit einem maskiert werden müssen, \um dieErste socatBefehl. Wenn diese Zeile komplexer wird, ist es einfacher, einfach ein Skript wie dieses auszuführen:

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

    mit /path/to/myscript.sh:

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

    execim Shell-Befehl ist optional, vermeidet aber unnötiges Herumliegen in der Shell.

socatexportiert auch einige eigene Variablen, die im Skript wiederverwendet werden können, was Sie beispielsweise wie folgt überprüfen könnten (mit einer hergestellten Verbindung):

$ 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

verwandte Informationen