
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
,fork
wartensocat
system:
exec:
ist einem Shell-Interpreter vorzuziehen , mit dem man nach demls
Befehl einfach einen weiteren Befehl ausführen kann,Das ist ein neuer
socat
BefehlDadurch 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 dieErstesocat
Befehl. 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
exec
im Shell-Befehl ist optional, vermeidet aber unnötiges Herumliegen in der Shell.
socat
exportiert 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