I have one specific Ubuntu VM on my network that won't send UDP packets with a data length below 12 bytes. E.g:
"HelloWorld123"
gets sent.
"HelloWorld"
does not get sent.
I tried all kinds of different methods, all to the same outcome.
All these packets get sent:
printf 'HelloWorld123' | nc -u 192.168.20.49 30303
echo -n 'HelloWorld123' > /dev/udp/192.168.20.49/30303
php udp_send.php 192.168.20.49 30303 "HelloWorld123"
All these packets do not get sent on this one machine:
printf 'HelloWorld' | nc -u 192.168.20.49 30303
echo -n 'HelloWorld' > /dev/udp/192.168.20.49/30303
php udp_send.php 192.168.20.49 30303 "HelloWorld"
On every other machine in my network (older Ubuntu VMs and Windows machines) all packets get sent, no matter how many bytes long (as expected).
I need this as a specific piece of hardware needs a UDP packet 11 bytes long (see my original question on Stack Overflow)
Wireshark logs all packets as if they're sent correctly:
# 'HelloWorld123' entry:
537 11.677245720 192.168.20.8 192.168.20.49 UDP 55 51956 → 30303 Len=13
# 'HelloWorld' entry:
207 5.684951175 192.168.20.8 192.168.20.49 UDP 52 58603 → 30303 Len=10
Anyone have a clue what's going on here? A bug in Ubuntu's latest UDP checksum generation for messages below 12 bytes? How could I find out more about who's rejecting these UDP packets in the end?