Я отправляю 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.
Изображение ОШЕЛОМИТЬ кадра:
Изображение простого кадра UDP:
Почему это происходит?
Это просто совпадение. Вы генерируете случайную полезную нагрузку, и иногда генерируемые случайные байты будут иметь структуру заголовка STUN-пакета.
.