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

netcatexiste después de una conexión.socatharí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
servicescript que ejecuta sufunc, sea lo que sea:#! / bin / sh mientras lee -r MENSAJE hacer echo 1> & 2 "$ {TCPREMOTEIP}" "$ {TCPREMOTEPORT}" rx "$ {MESSAGE}" func hechoLas variables de entorno
TCPREMOTEIPyTCPREMOTEPORTestá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
tcpservergenera elserviceguión:Hay versiones mejoradas compatibles con IPv6 de Bernstein ucspi-tcp. Con Erwin Hoffman,
tcpserverintenta manejar tanto IPv4 como IPv6 en uno (si el sistema operativo lo admite, algunos no lo hacen) y genera elservicescript:Bercot s6-networking, s6 y execline
Con la red s6 de Laurent Bercot,
s6-tcpserver4ys6-tcpserver6maneje IPv4 e IPv6 por separado, y genere elservicescript:Uno puede construir servidores más complejos mediante la interposición de herramientas como
s6-tcpserver-accessys6-applyuidgiden la cadena inmediatamente antes./service.herramientas UCSPI nosh
Con el conjunto de herramientas nosh,
tcp-socket-listenescucha en el socket TCP, nuevamente manejando IPv4 e IPv6 de manera simultánea si el sistema operativo admite hacerlo, y cadenas a lastcp-socket-acceptque a su vez genera elservicescript:O uno ejecuta dos procesos separados, en sistemas operativos como OpenBSD:
Uno puede construir servidores más complejos interponiendo herramientas como
ucspi-socket-rules-checkysetuidgiden la cadena.Pape ipsvd
Con el ipsvd de Gerrit Pape,
tcpsvdgenera elserviceguión:UCSPI-UDP
El
servicescript 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-listenin 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
tcpserverprograma . 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
udpsvdque está disponible en Ubuntu / Debian ( ver página de manual ), así como integrado en busybox. Ejemplo:Reemplace
catcon 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