La forma UCSPI-TCP
Hay conjuntos de herramientas distintos de netcat. Aquí le mostramos cómo usar algunos de ellos. Todos suponen la existencia de un service
script que ejecuta su func
, sea lo que sea:
#! / bin / sh
mientras lee -r MENSAJE
hacer
echo 1> & 2 "$ {TCPREMOTEIP}" "$ {TCPREMOTEPORT}" rx "$ {MESSAGE}"
func
hecho
Las variables de entorno TCPREMOTEIP
y TCPREMOTEPORT
están definidas por el protocolo UCSPI-TCP.
La secuencia de comandos se genera como un proceso individual por conexión TCP utilizando los diversos conjuntos de herramientas. En lo que sigue, las herramientas se muestran tal como se usan dentro de un script corto. Tal script, llamado convencionalmente run
, es cómo uno los ejecutaría bajo un administrador de servicio familiar daemontools. Por supuesto, pueden invocarse directamente.
Bernstein ucspi-tcp
Con el ucspi-tcp de Daniel J. Bernstein, se tcpserver
genera el service
guión:
#! / bin / sh -e
exec tcpserver -v -P -R -H -l 0 0.0.0.0 7777 ./service
Hay versiones mejoradas compatibles con IPv6 de Bernstein ucspi-tcp. Con Erwin Hoffman, tcpserver
intenta manejar tanto IPv4 como IPv6 en uno (si el sistema operativo lo admite, algunos no lo hacen) y genera el service
script:
#! / bin / sh -e
exec tcpserver -v -P -R -H -l 0 :: 0 7777 ./service
Bercot s6-networking, s6 y execline
Con la red s6 de Laurent Bercot, s6-tcpserver4
y s6-tcpserver6
maneje IPv4 e IPv6 por separado, y genere el service
script:
#! / command / execlineb
s6-tcpserver4 -v 0.0.0.0 7777
./Servicio
#! / command / execlineb
s6-tcpserver6 -v :: 0 7777
./Servicio
Uno puede construir servidores más complejos mediante la interposición de herramientas como s6-tcpserver-access
y s6-applyuidgid
en la cadena inmediatamente antes ./service
.
herramientas UCSPI nosh
Con el conjunto de herramientas nosh, tcp-socket-listen
escucha en el socket TCP, nuevamente manejando IPv4 e IPv6 de manera simultánea si el sistema operativo admite hacerlo, y cadenas a las tcp-socket-accept
que a su vez genera el service
script:
#! / bin / nosh
tcp-socket-listen --combine4and6 :: 7777
tcp-socket-accept --verbose --localname 0
./Servicio
O uno ejecuta dos procesos separados, en sistemas operativos como OpenBSD:
#! / bin / nosh
tcp-socket-listen 0.0.0.0 7777
tcp-socket-accept --verbose --localname 0
./Servicio
#! / bin / nosh
tcp-socket-listen :: 7777
tcp-socket-accept --verbose --localname ::
./Servicio
Uno puede construir servidores más complejos interponiendo herramientas como ucspi-socket-rules-check
y setuidgid
en la cadena.
#! / bin / nosh
tcp-socket-listen --combine4and6 :: 7777
usuario sin privilegios setuidgid
tcp-socket-accept --verbose --localname 0
ucspi-socket-rules-check --verbose
./Servicio
Pape ipsvd
Con el ipsvd de Gerrit Pape, tcpsvd
genera el service
guión:
#! / bin / sh -e
exec tcpsvd -v 0.0.0.0 7777 ./service
UCSPI-UDP
El service
script común puede manejar cuando la entrada estándar es un socket de flujo . Pero no especificó TCP explícitamente.
Aunque algunos de los juegos de herramientas mencionados anteriormente se pueden usar para construir servidores UDP de manera similar a cómo uno puede usarlos para construir servidores TCP (cf udp-socket-listen
in nosh), es complicado construir el programa de servicio real con script de shell, ya que los componentes integrados de shell no necesariamente se adapta bien cuando la entrada estándar es un socket de datagrama .
Otras lecturas
- Protocolo:
- conjuntos de herramientas:
- Daniel J. Bernstein. ucspi-tcp . cr.yp.to.
- s6-networking . Laurent Bercot. skarnet.org.
- s6 . Laurent Bercot. skarnet.org.
- Jonathan de Boyne Pollard (2016). comilona . Softwares
- ipsvd . Gerrit Pape. smarden.org.
- manuales de referencia: