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 Ihr func
Programm ausführt , was auch immer das sein mag:
#! / bin / sh
während Sie -r NACHRICHT lesen
tun
echo 1> & 2 "$ {TCPREMOTEIP}" "$ {TCPREMOTEPORT}" rx "$ {MESSAGE}"
func
erledigt
Die TCPREMOTEIP
und TCPREMOTEPORT
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 das service
Drehbuch:
#! / bin / sh -e
exec tcpserver -v -P -R -R -H -l 0 0.0.0.0 7777 ./service
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 das service
Skript erzeugt:
#! / bin / sh -e
exec tcpserver -v -P -R -R -H -l 0 :: 0 7777 ./service
Bercot S6-Networking, S6 und Execline
Mit Laurent Bercots s6-Netzwerk s6-tcpserver4
und s6-tcpserver6
IPv4 und IPv6 getrennt behandeln und das service
Skript erzeugen:
#! / command / execlineb
s6-tcpserver4 -v 0.0.0.0 7777
./Bedienung
#! / command / execlineb
s6-tcpserver6 -v :: 0 7777
./Bedienung
Man kann komplexere Server aufbauen, indem man Tools wie s6-tcpserver-access
und s6-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, an tcp-socket-accept
die das service
Skript gesendet wird :
#! / bin / nosh
tcp-socket-listen --combine4and6 :: 7777
tcp-socket-accept --verbose --localname 0
./Bedienung
Oder man führt zwei separate Prozesse auf Betriebssystemen wie OpenBSD aus:
#! / bin / nosh
tcp-socket-listen 0.0.0.0 7777
tcp-socket-accept --verbose --localname 0
./Bedienung
#! / bin / nosh
tcp-socket-listen :: 7777
tcp-socket-accept --verbose --localname ::
./Bedienung
Man kann komplexere Server aufbauen, indem man Tools wie ucspi-socket-rules-check
und setuidgid
in die Kette einfügt.
#! / bin / nosh
tcp-socket-listen --combine4and6 :: 7777
setuidgid unprivilegierter Benutzer
tcp-socket-accept --verbose --localname 0
ucspi-socket-rules-check --verbose
./Bedienung
Pape ipsvd
Mit Gerrit Papes ipsvd tcpsvd
entsteht das service
Skript:
#! / bin / sh -e
exec tcpsvd -v 0.0.0.0 7777 ./service
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
- Protokoll:
- Toolsets:
- Daniel J. Bernstein. ucspi-tcp . cr.yp.to.
- s6-vernetzung . Laurent Bercot. skarnet.org.
- s6 . Laurent Bercot. skarnet.org.
- Jonathan de Boyne Pollard (2016). Nein . Software.
- ipsvd . Gerrit Pape. smarden.org.
- Referenzhandbücher: