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 service
script 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 TCPREMOTEIP
et TCPREMOTEPORT
sont 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 tcpserver
au service
script:
#! / 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, tcpserver
tente 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 service
script:
#! / 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-tcpserver4
et s6-tcpserver6
gérer IPv4 et IPv6 séparément, et reproduire le service
scé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-access
et s6-applyuidgid
dans 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-accept
auxquelles à son tour génère le service
script:
#! / 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-check
et setuidgid
dans 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 tcpsvd
le service
script:
#! / bin / sh -e
exec tcpsvd -v 0.0.0.0 7777 ./service
UCSPI-UDP
Le service
script 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-listen
en 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: