Quero que um servidor de eco UDP obtenha pacotes e responda exatamente o que recebeu. Como posso simplesmente fazer isso usando netcat
or socat
? Ele deve permanecer vivo para sempre e manipular pacotes provenientes de vários hosts.
Quero que um servidor de eco UDP obtenha pacotes e responda exatamente o que recebeu. Como posso simplesmente fazer isso usando netcat
or socat
? Ele deve permanecer vivo para sempre e manipular pacotes provenientes de vários hosts.
Respostas:
Outra ferramenta semelhante ao netcat é a versão nmap,, ncat
que possui muitos brindes embutidos para simplificar coisas como esta. Isso funcionaria:
ncat -e /bin/cat -k -u -l 1235
-e significa que executa / bin / cat (para repetir o que você digita)
-k significa manter vivo, que continua ouvindo após cada conexão
-u significa udp
-l 1235 significa que escuta na porta 1235
Eu costumava socat -v PIPE udp-recvfrom:5553,fork
executar o servidor e socat - udp:localhost:5553
para clientes.
Esta foi uma grande ajuda!
socat TCP4-LISTEN:2000,fork EXEC:cat
Você também pode usar o socat (em vez de usar o netcat) como servidor de eco e o netcat como cliente.
Servidor de eco Socat (escuta na porta TCP 1234):
socat -v tcp-l:1234,fork exec:'/bin/cat'
Cliente Netcat (conecta ao serverip na porta TCP 1234):
nc serverip 1234
Você pode escrever um programa C que bifurca nc -u -l -p 4321
e depois usa o dup (2) para conectar:
Então, em um loop infinito, o pai lê de stdin e grava em stdout o que o pai lê.
socat -v PIPE UDP-LISTEN:5555,fork
, mas a segunda conexão é recusada. A propósito, ele funciona bem com o TCP-LISTEN. Eu estou evitando ao código, caso contrário, eu poderia escrever tudo em C.
Se você estiver executando no Windows e usar um ambiente unix como o cygwin, o netcat migth não fornecerá o parâmetro -e. Isso funcionou muito bem para mim.
netcat
solução pré-instalada em Ubunutu
O netcat
pré-instalado no Ubuntu 16.04 vem netcat-openbsd
e não tem -c
opção, mas o manual fornece uma solução:
sudo mknod -m 777 fifo p
cat fifo | netcat -l -k localhost 8000 > fifo
Exemplo de cliente:
echo abc | netcat localhost 8000
TODO: como modificar o valor da string de entrada? O seguinte não retorna nenhuma resposta:
cat fifo | tr 'a' 'b' | netcat -l -k localhost 8000 > fifo
O exemplo do shell remoto, no entanto, funciona:
cat fifo | /bin/sh -i 2>&1 | netcat -l -k localhost 8000 > fifo
No entanto, não sei como lidar com solicitações simultâneas.