Ich frage mich, wie ich ein Shell-Skript dazu bringen kann, einen bestimmten Port abzuhören (vielleicht mit Netcat?). Hoffentlich zeichnet das Skript die Nachricht auf, wenn eine Nachricht an diesen Port gesendet wird, und führt dann eine Funktion aus.
Beispiel:
Computer 1 hat das Skript im Hintergrund ausgeführt, das Skript hat Port 1234 für eingehenden Verkehr geöffnet
Computer 2 sendet die Nachricht "Hallo Welt" an Port 1234 von Computer 1
Das Skript auf Computer 1 zeichnet die Nachricht "Hallo Welt" in einer Variablen $ MESSAGE auf
Das Skript wird jetzt ausgeführt, nachdem die Variable $ MESSAGE festgelegt wurde
Wie spende ich das?
quelle
netcat
besteht nach einer Verbindung.socat
würde das gleiche tun, wenn Sie ", fork" von meiner Kommandozeile entfernen.Der UCSPI-TCP-Weg
Es gibt andere Toolsets als Netcat. Hier erfahren Sie, wie Sie einige davon verwenden. Sie alle setzen die Existenz eines
service
Skripts voraus, das Ihrfunc
Programm ausführt , was auch immer das sein mag:Die
TCPREMOTEIP
undTCPREMOTEPORT
Umgebungsvariablen werden vom UCSPI-TCP-Protokoll definiert.Das Skript wird als einzelner Prozess pro TCP-Verbindung unter Verwendung der verschiedenen Toolsets erzeugt. Im Folgenden werden die Werkzeuge so gezeigt, wie sie in einem kurzen Skript verwendet werden. Mit einem solchen Skript, das herkömmlicherweise benannt wird
run
, wird es unter einem Servicemanager der Daemontools-Familie ausgeführt. Sie können natürlich direkt aufgerufen werden.Bernstein ucspi-tcp
Mit Daniel J. Bernsteins ucspi-tcp
tcpserver
entsteht dasservice
Drehbuch:Es gibt IPv6-fähige erweiterte Versionen von Bernstein ucspi-tcp. Mit Erwin Hoffman wird
tcpserver
versucht, sowohl IPv4 als auch IPv6 in einem zu verarbeiten (wenn das Betriebssystem dies unterstützt, einige nicht) und dasservice
Skript erzeugt:Bercot S6-Networking, S6 und Execline
Mit Laurent Bercots s6-Netzwerk
s6-tcpserver4
unds6-tcpserver6
IPv4 und IPv6 getrennt behandeln und dasservice
Skript erzeugen:Man kann komplexere Server aufbauen, indem man Tools wie
s6-tcpserver-access
unds6-applyuidgid
in die Kette unmittelbar davor einfügt./service
.nosh UCSPI-Tools
Hört mit dem Nosh-Toolset
tcp-socket-listen
den TCP-Socket ab und verarbeitet IPv4 und IPv6 erneut gleichzeitig, wenn das Betriebssystem dies unterstützt, sowie Ketten, antcp-socket-accept
die dasservice
Skript gesendet wird :Oder man führt zwei separate Prozesse auf Betriebssystemen wie OpenBSD aus:
Man kann komplexere Server aufbauen, indem man Tools wie
ucspi-socket-rules-check
undsetuidgid
in die Kette einfügt.Pape ipsvd
Mit Gerrit Papes ipsvd
tcpsvd
entsteht dasservice
Skript:UCSPI-UDP
Das allgemeine
service
Skript kann verarbeiten, wenn die Standardeingabe ein Stream- Socket ist. Sie haben TCP jedoch nicht explizit angegeben.Obwohl einige der oben genannten Toolkits verwendet werden können, um UDP-Server auf ähnliche Weise zu erstellen, wie man sie zum Erstellen von TCP-Servern verwenden kann (vgl.
udp-socket-listen
In nosh), ist es schwierig, das eigentliche Serviceprogramm mit Shell-Skript zu erstellen, da dies in den Shell-Builds nicht der Fall ist muss gut zurechtkommen, wenn die Standardeingabe ein Datagramm- Socket ist.Weiterführende Literatur
tcpserver
Programm . ucspi-tcp.tcpserver
. ucspi-tcp6 . fehcom.de.s6-tcpserver4
. Laurent Bercot. s6-vernetzung . skarnet.org.s6-tcpserver6
. Laurent Bercot. s6-vernetzung . skarnet.org.s6-tcpserver-access
. Laurent Bercot. s6-vernetzung . skarnet.org.s6-applyuidgid
. Laurent Bercot. s6 . skarnet.org.tcpserver
. Nosh Guide . Software.tcp-socket-listen
. Nosh Guide . Software.tcp-socket-accept
. Nosh Guide . Software.ucspi-socket-rules-check
. Nosh Guide . Software.setuidgid
. Nosh Guide . Software.udp-socket-listen
. Nosh Guide . Software.tcpsvd
. ipsvd . Gerrit Pape. smarden.org.quelle
Dies kann auch mit
udpsvd
Ubuntu / Debian ( siehe Manpage ) sowie in der Busybox integriert erfolgen. Beispiel:Ersetzen Sie es
cat
durch Ihr Shell-Skript, um es auszuführen. Stdin ist das Paket.Mit
netcat
können Sie in einer Schleife laufen, um weiter zuzuhören, und jedes Paket weiterleiten anmyscript
:Wenn Sie alle empfangenen Pakete als Stream an einen einzelnen Aufruf Ihres Skripts übergeben möchten:
quelle