Quando executo o seguinte comando Netcat e visualizo os pacotes com o Wireshark , ele diz que o pacote UDP está malformado.
$ echo "this is a test" | nc -u 127.0.0.1 53
Da mesma forma, usar comandos como $ echo "this is a test" > /dev/udp/127.0.0.1/53
produzir erros de "pacote malformado" no Wireshark.
O comando echo é enviado / entregue ao servidor Netcat sem erros. Mas isso me fez pensar: é possível construir manualmente um pacote UDP adequado com eco ou alguma outra ferramenta Unix nativa?
Estou usando o Debian e o macOS.
echo $[61002+RANDOM%4532]
para escolher um número de porta aleatório nesse intervalo.Respostas:
Seu pacote é completamente válido, do ponto de vista de IP e UDP. Se você expandir os detalhes do protocolo Ethernet / IP / UDP no painel inferior do Wireshark, verá que o pacote foi analisado com êxito.
No entanto, como é destinado à porta 53, o Wireshark tenta analisá-lo como um pacote DNS, o que não é possível (uma vez que a cadeia "isto é um teste" não é uma solicitação DNS válida conforme a especificação RFC 1035 ).
Se você seguir a especificação nesse link, poderá construir um pacote válido quando analisado como uma solicitação DNS. Se você enviar o pacote para outra porta, notará que o Wireshark não o analisará mais como uma solicitação DNS e, portanto, não exibirá esse aviso.
fonte
Você pode enviá-los para aliases especiais do Bash com redirecionamento.
Nas páginas de manual do Bash:
Isso enviará um pacote UDP para 192.168.2.11 para a porta 8080:
fonte
Existem várias perguntas aqui; a reivindicação de um "pacote malformado" pode ser devido ao descarregamento da soma de verificação e, se houver, é um erro falso, pois reflete que a captura de pacotes não tem uma visão completa - parte do trabalho foi feito no hardware da rede. O WireShark deve ter documentação sobre isso.
Caso contrário, várias ferramentas (como
socat
,nc
ounetcat
, ou através de recursos extremamente semelhantes em shells comoksh93
oubash
) podem pegar bytes da entrada padrão e despejá-los no que se torna um pacote UDP. Se isso é "adequado" depende do protocolo; em teoria, poderia-se construir e enviar um pacote DNS ou DHCP dessa maneira, embora mais frequentemente as pessoas usem uma biblioteca ou software dedicado que (espero) implemente corretamente o protocolo em questão, pois geralmente há muito mais envolvimento do que definir alguns bits no o corpo de um pacote e enviá-lo pela rede, notadamente manipulando respostas, tentando novamente após tempo limite ou erro, campos de cabeçalho de pacote etc. Os protocolos geralmente são muito bem documentados em RFC ou consulte a série de livros "TCP / IP Illustrated" por Stevens para ainda mais documentação.Ferramentas específicas, como
nmap
fazer coisas muito personalizadas com a construção de pacotes. Caso contrário, para a construção manual de pacotes, normalmente é usada uma linguagem de programação, embora a maioria dos softwares use bibliotecas ou serviços de sistema existentes para enviar pacotes DNS ou DHCP ou outros pacotes UDP, pois esses são muito menos trabalhosos e menos propensos a erros do que a criação manual de uma matéria-prima. pacote a partir do zero.fonte