Porque você está usando o UDP. Não há configuração de conexão no UDP antes de enviar qualquer pacote como o TCP, o que significa que você só verá pacotes se os dados reais forem transferidos. E o netcat envia apenas os dados que recebe do stdin.
Eu não entendo o comportamento do netcat. Digamos que eu tenha um host agindo como servidor:
[root@localhost tmp]# nc -u -l -p 670
Então, tento me conectar de um cliente:
root@debian:/tmp# nc -u 192.168.0.109 670
Enquanto isso, tento capturar esses pacotes:
[root@localhost sergio]# tcpdump -nn -i wlp7s0 port 670
Não vejo nenhum pacote, apenas quando emito algo como:
root@debian:/tmp# echo "Hola Mundo" | nc -u 192.168.0.109 670
[root@localhost sergio]# tcpdump -nn -i wlp7s0 port 670
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on wlp7s0, link-type EN10MB (Ethernet), capture size 65535 bytes
01:37:39.425276 IP 192.168.0.114.44287 > 192.168.0.109.670: UDP, length 12
Eu me pergunto se é o comportamento adequado do netcat. Por que a razão de não ver nenhum pacote a não ser quando eu envio algo do stdin?
Porque você está usando o UDP. Não há configuração de conexão no UDP antes de enviar qualquer pacote como o TCP, o que significa que você só verá pacotes se os dados reais forem transferidos. E o netcat envia apenas os dados que recebe do stdin.