Me pregunto cómo hacer que un script de shell escuche en un determinado puerto (¿tal vez usando netcat?). Con suerte, para que cuando se envíe un mensaje a ese puerto, el script grabe el mensaje y luego ejecute una función.
Ejemplo:
La computadora 1 tiene el script ejecutándose en segundo plano, el script abrió el puerto 1234 al tráfico entrante
La computadora 2 envía el mensaje "hola mundo" al puerto 1234 de la computadora 1
El script en la computadora 1 registra el mensaje "hello world" en una variable $ MESSAGE
El script ejecuta la función ahora que se ha configurado la variable $ MESSAGE
¿Cómo hago para poner esto?
fuente
netcat
existe después de una conexión.socat
haría lo mismo si elimina ", fork" de mi línea de comando.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 sufunc
, sea lo que sea:Las variables de entorno
TCPREMOTEIP
yTCPREMOTEPORT
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 elservice
guión: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 elservice
script:Bercot s6-networking, s6 y execline
Con la red s6 de Laurent Bercot,
s6-tcpserver4
ys6-tcpserver6
maneje IPv4 e IPv6 por separado, y genere elservice
script:Uno puede construir servidores más complejos mediante la interposición de herramientas como
s6-tcpserver-access
ys6-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 lastcp-socket-accept
que a su vez genera elservice
script:O uno ejecuta dos procesos separados, en sistemas operativos como OpenBSD:
Uno puede construir servidores más complejos interponiendo herramientas como
ucspi-socket-rules-check
ysetuidgid
en la cadena.Pape ipsvd
Con el ipsvd de Gerrit Pape,
tcpsvd
genera elservice
guión: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
tcpserver
programa . ucspi-tcp.tcpserver
. ucspi-tcp6 . fehcom.de.s6-tcpserver4
. Laurent Bercot. s6-networking . skarnet.org.s6-tcpserver6
. Laurent Bercot. s6-networking . skarnet.org.s6-tcpserver-access
. Laurent Bercot. s6-networking . skarnet.org.s6-applyuidgid
. Laurent Bercot. s6 . skarnet.org.tcpserver
. nosh Guide . Softwarestcp-socket-listen
. nosh Guide . Softwarestcp-socket-accept
. nosh Guide . Softwaresucspi-socket-rules-check
. nosh Guide . Softwaressetuidgid
. nosh Guide . Softwaresudp-socket-listen
. nosh Guide . Softwarestcpsvd
. ipsvd . Gerrit Pape. smarden.org.fuente
Esto también se puede hacer con lo
udpsvd
que está disponible en Ubuntu / Debian ( ver página de manual ), así como integrado en busybox. Ejemplo:Reemplace
cat
con su script de shell para ejecutar, stdin es el paquete.Con
netcat
, puede ejecutar en un bucle para seguir escuchando y pasar cada paquete amyscript
:Si desea pasar todos los paquetes recibidos como una secuencia a una sola invocación de su script:
fuente