尝试使用Netcat发送UDP数据包
nc -u 127.0.0.1 1234
使用tcpdump查看实际数据包
tcpdump -i any -vv -n udp dst port 1234
理论上,UDP数据包大小可以是大约64K,但是当我发送大小大于2048的消息时,Netcat会分割数据并发送2个单独的UDP数据包。例如,如果我发送以下长字符串
012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
tcpdump将显示2个数据包:
08:13:09.171828 IP (tos 0x0, ttl 64, id 25262, offset 0, flags [DF], proto UDP (17), length 2076)
127.0.0.1.33279 > 127.0.0.1.1234: [bad udp cksum 0x061c -> 0x7eb9!] UDP, length 2048
08:13:09.171842 IP (tos 0x0, ttl 64, id 25263, offset 0, flags [DF], proto UDP (17), length 981)
127.0.0.1.33279 > 127.0.0.1.1234: [bad udp cksum 0x01d5 -> 0x3723!] UDP, length 953
是否可以通过Netcat或其他工具在一个UDP数据包中发送长消息?无法在互联网上找到Netcat的任何选项。
P.S。我正在使用Ubuntu 14.04
答案 0 :(得分:2)
问题是因为netcat读取特定大小的块并以这些块大小写入。并且由于它是从流(即stdin)读取的,所以无论如何都无法定义消息边界之类的东西。我看不到任何用nc更改读取大小的选项,但是如果你需要一些命令行来发送更大的数据包,你可以使用Perl或类似的东西:
$ dd if=/dev/zero bs=1024 count=32 | perl -MIO::Socket::INET -e \
'IO::Socket::INET->new(PeerAddr => q[127.0.0.1:1234], Proto => q[udp])->send(do { local $/; <STDIN> })'
$ tcpdump -i lo -n port 1234
... IP 127.0.0.1.42061 > 127.0.0.1.1234: UDP, length 32768