普通 UDP 在 Wireshark 中显示为 STUN

普通 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 中分析此通信时,它显示

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 帧

为什么会发生这种情况?

答案1

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

相关内容