Простой UDP обнаруживается, в то время как ОШЕЛОМЛЯЮТ в Wireshark

Я отправляю 4 байта данных по UDP по запросу из другой программы. Иногда протокол кадра определяется, как ОШЕЛОМЛЯЮТ в Wireshark, но у меня нет подсказки почему.

Рубиновый прототип коммуникации похож на это (simpled вниз как можно больше для ясности)

Код запроса:

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, иногда как ОШЕЛОМЛЯЮТ. Я заметил, что 2 старших значащих байта ОШЕЛОМИТЬ кадров, которые я проверил, имеют значения 0x00, держат пари, что некоторые простые кадры UDP также имеют 2 старших значащих байта со значением 0x00.

Изображение ОШЕЛОМИТЬ кадра: STUN frame

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

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

0
задан 12 December 2014 в 14:54
1 ответ
-

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

.
2
ответ дан 4 December 2019 в 13:53

Теги

Похожие вопросы