普通的UDP在Wireshark中显示为STUN

我从另一个程序请求通过UDP发送4个字节的数据。 有时框架的协议被确定为Wireshark中的STUN,但我不知道为什么。

通信的ruby原型看起来像这样(为了清楚起见,尽可能简化)

请求代码:

require 'Socket' sock = UDPSocket.new loop do sock.send "req", 0, "127.0.0.1", 40004 x = sock.recvfrom 4 dataLength = x[0].unpack('L')[0] received = 0 sleep 2 end 

答复码:

 require 'Socket' sock = UDPSocket.new sock.bind "127.0.0.1", 40004 loop do x = sock.recvfrom 3 if x[0] == 'req' sock.send [(Random.rand 10000..300000)].pack('L'), 0, "127.0.0.1", x[1][1] end end 

在Wireshark中分析这个通信时,它显示了通过Wireshark发送的帧

 sock.send [(Random.rand 10000..300000)].pack('L'), 0, "127.0.0.1", x[1][2] 

有时被识别为普通的UDP,有时被识别为STUN。 我注意到,我检查的STUN帧的2个最重要的字节值为0x00,打赌一些普通的UDP帧也有2个最重要的字节值为0x00。

STUN框架的图像: STUN框架

普通的UDP帧的图像: UDP帧

为什么发生这种情况?

这只是巧合。 您正在生成一个随机的有效载荷,有时生成的随机字节将具有STUN数据包的头结构。