Eu estou querendo saber como obter um script de shell para ouvir em uma determinada porta (talvez usando o netcat?). Esperamos que, quando uma mensagem for enviada para essa porta, o script registre a mensagem e execute uma função.
Exemplo:
O computador 1 tem o script em execução em segundo plano, o script abriu a porta 1234 para o tráfego de entrada
O computador 2 envia a mensagem "olá mundo" para a porta 1234 do computador 1
O script no Computador 1 registra a mensagem "olá mundo" em uma variável $ MESSAGE
O script executa a função agora que a variável $ MESSAGE foi definida
Como faço para doar isso?
fonte
netcat
existe após uma conexão.socat
faria o mesmo se você remover ", fork" da minha linha de comando.A maneira UCSPI-TCP
Existem outros conjuntos de ferramentas além do netcat. Aqui está como usar alguns deles. Todos eles presumem a existência de um
service
script que executa o seufunc
, seja ele qual for:As variáveis de ambiente
TCPREMOTEIP
eTCPREMOTEPORT
são definidas pelo protocolo UCSPI-TCP.O script é gerado como um processo individual por conexão TCP usando os vários conjuntos de ferramentas. A seguir, as ferramentas são mostradas como usadas em um script curto. Esse script, de nome convencional
run
, é como alguém os executaria sob um gerente de serviços da família daemontools. É claro que eles podem ser invocados diretamente.Bernstein ucspi-tcp
Com o ucspi-tcp de Daniel J. Bernstein,
tcpserver
gera oservice
script:Existem versões aprimoradas para IPv6 do Bernstein ucspi-tcp. Com Erwin Hoffman, as
tcpserver
tentativas de lidar com IPv4 e IPv6 em um (se o sistema operacional suportar isso, alguns não) e geram oservice
script:Bercot s6-networking, s6 e execline
Com S6-redes de Laurent Bercot,
s6-tcpserver4
es6-tcpserver6
lidar com IPv4 e IPv6 separadamente, e gerar oservice
script:Pode-se construir servidores mais complexos interpondo ferramentas como
s6-tcpserver-access
es6-applyuidgid
na cadeia imediatamente antes./service
.ferramentas UCSPI nosh
Com o conjunto de ferramentas nosh,
tcp-socket-listen
escuta no soquete TCP, manipulando novamente IPv4 e IPv6 de forma simultânea se o sistema operacional suportar isso e as cadeias àstcp-socket-accept
quais, por sua vez, gera oservice
script:Ou então, são executados dois processos separados, em sistemas operacionais como o OpenBSD:
Pode-se construir servidores mais complexos interpondo ferramentas como
ucspi-socket-rules-check
esetuidgid
na cadeia.Pape ipsvd
Com o ipsvd de Gerrit Pape,
tcpsvd
gera oservice
script:UCSPI-UDP
O
service
script comum pode manipular quando a entrada padrão é um soquete de fluxo . Mas você não especificou o TCP explicitamente.Embora alguns dos kits de ferramentas mencionados acima possam ser usados para criar servidores UDP de maneira semelhante a como se pode usá-los para criar servidores TCP (cf
udp-socket-listen
em nosh), é complicado criar o programa de serviço real com o shell script, pois os componentes internos do shell não necessariamente lidar bem quando a entrada padrão é um soquete de datagrama .Leitura adicional
tcpserver
programa . ucspi-tcp.tcpserver
. ucspi-tcp6 . fehcom.de.s6-tcpserver4
. Laurent Bercot. rede s6 . skarnet.org.s6-tcpserver6
. Laurent Bercot. rede s6 . skarnet.org.s6-tcpserver-access
. Laurent Bercot. rede s6 . skarnet.org.s6-applyuidgid
. Laurent Bercot. S6 . skarnet.org.tcpserver
. Guia nosh . Programas.tcp-socket-listen
. Guia nosh . Programas.tcp-socket-accept
. Guia nosh . Programas.ucspi-socket-rules-check
. Guia nosh . Programas.setuidgid
. Guia nosh . Programas.udp-socket-listen
. Guia nosh . Programas.tcpsvd
. ipsvd . Gerrit Pape. smarden.org.fonte
Isso também pode ser feito com o
udpsvd
que está disponível no Ubuntu / Debian ( consulte a página de manual ), bem como embutido no busybox. Exemplo:Substitua
cat
pelo seu shell script para executar, stdin é o pacote.Com
netcat
, você pode executar um loop para continuar ouvindo e passar cada pacote paramyscript
:Se você deseja passar todos os pacotes recebidos como um fluxo para uma única invocação do seu script:
fonte