Разбор DMR-трафика в Wireshark: что видно в дампе хотспота

Категория: ДиагностикаСложность: ~9 мин

Когда «вроде всё настроено, а не работает», логи хотспота говорят не всё. Дамп трафика показывает ровно то, что ушло в сеть и что пришло обратно: дошёл ли вход, кто отвечает, идут ли голосовые пакеты. Разберём, как снять дамп и что в нём смотреть, не будучи сетевым инженером.

Снять дамп

На самом хотспоте (Pi-Star, WPSD или наш образ) достаточно штатного tcpdump:

sudo tcpdump -i any -w /tmp/dmr.pcap udp port 62031

Порт подставьте свой: у нашей сети это 62031, у ряда других — 62030. Дальше нажмите PTT пару раз, остановите запись и заберите файл на компьютер обычным scp.

Если хотспота под рукой нет Дамп можно снять и на компьютере, но только если трафик через него проходит: на домашнем коммутаторе чужие пакеты вы не увидите. Проще всего писать прямо на устройстве.

Что смотреть без всяких плагинов

Даже голый Wireshark даёт много. Фильтр udp.port == 62031 и дальше по картине:

  • Только исходящие пакеты, ответов нет. Сервер недоступен, порт закрыт или адрес неверный. Проблема до всякого DMR.
  • Короткий обмен и тишина. Скорее всего, вход отклонён: сервер ответил отказом. Смотрите начало полезной нагрузки — там текстовые сигнатуры.
  • Регулярные короткие пакеты в обе стороны. Это keepalive, соединение живо. Если голос при этом не идёт — проблема выше, в маршрутизации групп.
  • Пачки по 55 байт. Это и есть голос: полезная нагрузка 53 байта, из них 20 заголовок и 33 сам DMR-бёрст.

Полезная нагрузка читается глазами, если знать раскладку — она разобрана в статье про пакет DMRD. Первые четыре байта голосового пакета — ASCII «DMRD», и это видно прямо в правой панели Wireshark.

Плагин, который делает это читаемым

Штатного разборщика DMR в Wireshark нет, но есть открытый плагин на Lua для протокола MMDVM. Он раскладывает заголовки по полям: кто отправитель, кому, слот, тип кадра.

Ставится копированием одного файла в каталог плагинов: на Windows это C:\Program Files\Wireshark\plugins, на macOS — каталог внутри пакета приложения, на Linux — ~/.local/lib/wireshark/plugins/. После перезапуска Wireshark пакеты на выбранном порту начинают разбираться сами.

Три ограничения, о которых стоит знать заранее Плагин по умолчанию считает «своим» порт 62030 — под другой порт его надо править. Он разбирает только заголовки, а не сами DMR-кадры внутри. И он работает с протоколом MMDVMHost, но не с вариантом, которым пользуется BlueDV. Плюс лицензия у него некоммерческая — для рабочего продукта это имеет значение.

Что видно, а что нет

В дампе прекрасно видно: идентификаторы абонента и узла, номер группы, слот, последовательность кадров, тайминги. По ним ловятся типичные беды — не тот ID, не тот слот, вызов уходит в другую группу, поток обрывается без терминатора.

Чего в дампе нет — звука. Голос внутри зашифрован не в криптографическом смысле, а закодирован вокодером AMBE, и превратить его обратно в речь без соответствующего декодера нельзя. Для анализа самого эфира (а не сетевого обмена) используют другие инструменты — приёмник SDR и программные декодеры.

Альтернатива: структурные описания вместо плагина

Если нужно разбирать трафик программно, а не глазами, есть открытые формальные описания протокола в виде схем Kaitai Struct: по ним генерируется парсер на нужном языке. Покрыты и классический Homebrew, и вариант MMDVM, и вендорские стеки. Для Python-разбора того, что лежит внутри бёрста, подойдёт библиотека ok-dmrlib — в ней реализованы и помехоустойчивые коды, и разбор служебных сообщений.

Диагностика без дампов

В панели DMRhub видно то же самое в человеческом виде: кто вышел в эфир, в какую группу, с каким качеством, когда узел последний раз отвечал. К tcpdump имеет смысл идти, только когда панель показывает, что узел вообще не подключается.

Источники

  1. MMDVM-Dissector, Lua-плагин для Wireshark: пути установки, ограничения, лицензия — github.com/marrold/MMDVM-Dissector
  2. Практика захвата трафика хотспота, KD9CPB — kd9cpb.com
  3. Документация Wireshark по Lua-диссекторам — wiki.wireshark.org
  4. dmr-kaitai: формальные описания Homebrew и MMDVM — github.com/OK-DMR/dmr-kaitai
  5. ok-dmrlib: программный разбор содержимого бёрстов — github.com/OK-DMR/ok-dmrlib
В сети DMRhub

Настроили рацию — заходите в эфир: свой мастер, хотспоты и приложение с DMR прямо в телефоне.

Войти в портал