La voie UCSPI-TCP
Il existe des jeux d'outils autres que netcat. Voici comment en utiliser quelques-uns. Ils présument tous l'existence d'un servicescript qui exécute votre func, quel qu'il soit:
#! / bin / sh
en lisant -r MESSAGE
faire
écho 1> & 2 "$ {TCPREMOTEIP}" "$ {TCPREMOTEPORT}" rx "$ {MESSAGE}"
func
terminé
Les variables d'environnement TCPREMOTEIPet TCPREMOTEPORTsont définies par le protocole UCSPI-TCP.
Le script est généré comme un processus individuel par connexion TCP à l'aide des différents jeux d'outils. Dans ce qui suit, les outils sont présentés comme utilisés dans un court script. Un tel script, conventionnellement nommé run, est de savoir comment les exécuter sous un gestionnaire de services de la famille daemontools. Ils peuvent bien entendu être invoqués directement.
Bernstein ucspi-tcp
Avec ucspi-tcp de Daniel J. Bernstein, donne naissance tcpserverau servicescript:
#! / bin / sh -e
exec tcpserver -v -P -R -H -l 0 0.0.0.0 7777 ./service
Il existe des versions améliorées compatibles IPv6 de Bernstein ucspi-tcp. Avec Erwin Hoffman, tcpservertente de gérer à la fois IPv4 et IPv6 en un (si le système d'exploitation le prend en charge, quelques-uns ne le font pas) et génère le servicescript:
#! / bin / sh -e
exec tcpserver -v -P -R -H -l 0 :: 0 7777 ./service
Bercot s6-networking, s6 et execline
Avec s6-réseau de Laurent Bercot, s6-tcpserver4et s6-tcpserver6gérer IPv4 et IPv6 séparément, et reproduire le servicescénario:
#! / command / execlineb
s6-tcpserver4 -v 0.0.0.0 7777
./un service
#! / command / execlineb
s6-tcpserver6 -v :: 0 7777
./un service
On peut construire des serveurs plus complexes en interposant des outils tels que s6-tcpserver-accesset s6-applyuidgiddans la chaîne immédiatement avant ./service.
nosh UCSPI tools
Avec le jeu d'outils nosh, tcp-socket-listenécoute sur le socket TCP, gérant à nouveau IPv4 et IPv6 simultanément si le système d'exploitation le prend en charge, et les chaînes tcp-socket-acceptauxquelles à son tour génère le servicescript:
#! / bin / nosh
tcp-socket-listen --combine4and6 :: 7777
tcp-socket-accept --verbose --localname 0
./un service
Ou on exécute deux processus distincts, sur des systèmes d'exploitation tels que OpenBSD:
#! / bin / nosh
tcp-socket-listen 0.0.0.0 7777
tcp-socket-accept --verbose --localname 0
./un service
#! / bin / nosh
tcp-socket-listen :: 7777
tcp-socket-accept --verbose --localname ::
./un service
On peut construire des serveurs plus complexes en interposant des outils tels que ucspi-socket-rules-checket setuidgiddans la chaîne.
#! / bin / nosh
tcp-socket-listen --combine4and6 :: 7777
setuidgid utilisateur non privilégié
tcp-socket-accept --verbose --localname 0
ucspi-socket-rules-check --verbose
./un service
Pape ipsvd
Avec l'ipsvd de Gerrit Pape, lance tcpsvdle servicescript:
#! / bin / sh -e
exec tcpsvd -v 0.0.0.0 7777 ./service
UCSPI-UDP
Le servicescript commun peut gérer lorsque l'entrée standard est une socket de flux . Mais vous n'avez pas spécifié explicitement TCP.
Bien que certaines des boîtes à outils susmentionnées puissent être utilisées pour construire des serveurs UDP de la même manière que la façon dont on peut les utiliser pour construire des serveurs TCP (cf. udp-socket-listenen nosh), il est difficile de construire le programme de service réel avec un script shell, car les buildins du shell ne le font pas nécessairement faire face lorsque l'entrée standard est une prise de datagramme .
Lectures complémentaires
- Protocole:
- jeux d'outils:
- Daniel J. Bernstein. ucspi-tcp . cr.yp.to.
- mise en réseau s6 . Laurent Bercot. skarnet.org.
- s6 . Laurent Bercot. skarnet.org.
- Jonathan de Boyne Pollard (2016). nosh . Logiciels.
- ipsvd . Gerrit Pape. smarden.org.
- manuels de référence: