Quero enviar apenas um valor curto em um pacote UDP, mas executando o comando
echo -n "hello" | nc -4u localhost 8000
Posso ver que o servidor está recebendo o material hello , mas preciso pressionar Ctrl+ cpara sair do comando netcat.
Como posso encerrar após enviar um alô ?
Desculpe, pelo barulho, eu reli a página do manual e encontrei a -q
opção.
echo -n "hello" | nc -4u -q1 localhost 8000
funciona (fecha após 1 segundo).
Por algum motivo, ele não funciona -q0
.
-q seconds: after EOF on stdin, wait the specified number of seconds and then quit. If seconds is negative, wait forever.
Respostas:
Se você estiver usando o bash, você também pode escrever
e evitar todas as idiossincrasias e incompatibilidades do netcat.
Isso também funciona enviando para outros hosts, por exemplo:
Estes não são dispositivos "reais" no sistema de arquivos, mas apelidos "especiais" de bash . Há informações adicionais no Manual do Bash .
fonte
127.0.0.1
em vez disso,localhost
no Ubuntu 14.04. (Sim, eu tenholocalhost
em/etc/hosts
.)/dev/udp/
não é um arquivo real. É apenas um nome de arquivo interpretado especialmente por bash.Não encontrei a
-q1
opção no meu netcat. Em vez disso, usei a-w1
opção. Abaixo está o script bash que fiz para enviar um pacote udp para qualquer host e porta:fonte
Em um netcat atual (v0.7.1), você tem um switch -c:
Conseqüentemente,
deve fazer o truque.
fonte
O Netcat envia um pacote por nova linha. Então você está bem. Se você fizer algo mais complexo, talvez precise de outra coisa.
Eu estava brincando com o Wireshark quando percebi isso. Não sei se isso ajuda.
fonte
echo -n "hello\nworld" >/dev/udp/localhost/514
e você obterá 2 linhasTive o mesmo problema mas utilizo a
-w 0
opção de enviar apenas um pacote e desisto. Você deve usar este comando:fonte
-w0
. Erro: tempo de espera inválido 0