Назад | Перейти на главную страницу

Обычный UDP отображается в Wireshark как STUN

Я отправляю 4 байта данных по UDP по запросу из другой программы. Иногда протокол фрейма идентифицируется в Wireshark как STUN, но я не знаю почему.

Рубиновый прототип коммуникации выглядит так (максимально упрощен для ясности)

Код запроса:

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. Я заметил, что 2 наиболее значимых байта проверенных мной кадров STUN имеют значения 0x00, но некоторые простые кадры UDP также имеют 2 наиболее значимых байта со значением 0x00.

Изображение кадра STUN:

Изображение простого UDP-кадра:

Почему это происходит?

Это просто совпадение. Вы генерируете случайную полезную нагрузку, и иногда сгенерированные случайные байты будут иметь структуру заголовка пакета STUN.