Разбор DMR-трафика в Wireshark: что видно в дампе хотспота
Когда «вроде всё настроено, а не работает», логи хотспота говорят не всё. Дамп трафика показывает ровно то, что ушло в сеть и что пришло обратно: дошёл ли вход, кто отвечает, идут ли голосовые пакеты. Разберём, как снять дамп и что в нём смотреть, не будучи сетевым инженером.
Снять дамп
На самом хотспоте (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 пакеты на выбранном порту начинают разбираться сами.
Что видно, а что нет
В дампе прекрасно видно: идентификаторы абонента и узла, номер группы, слот, последовательность кадров, тайминги. По ним ловятся типичные беды — не тот ID, не тот слот, вызов уходит в другую группу, поток обрывается без терминатора.
Чего в дампе нет — звука. Голос внутри зашифрован не в криптографическом смысле, а закодирован вокодером AMBE, и превратить его обратно в речь без соответствующего декодера нельзя. Для анализа самого эфира (а не сетевого обмена) используют другие инструменты — приёмник SDR и программные декодеры.
Альтернатива: структурные описания вместо плагина
Если нужно разбирать трафик программно, а не глазами, есть открытые формальные описания протокола в виде схем Kaitai Struct: по ним генерируется парсер на нужном языке. Покрыты и классический Homebrew, и вариант MMDVM, и вендорские стеки. Для Python-разбора того, что лежит внутри бёрста, подойдёт библиотека ok-dmrlib — в ней реализованы и помехоустойчивые коды, и разбор служебных сообщений.
Диагностика без дампов
В панели DMRhub видно то же самое в человеческом виде: кто вышел в эфир, в какую группу, с каким качеством, когда узел последний раз отвечал. К tcpdump имеет смысл идти, только когда панель показывает, что узел вообще не подключается.
Источники
- MMDVM-Dissector, Lua-плагин для Wireshark: пути установки, ограничения, лицензия — github.com/marrold/MMDVM-Dissector
- Практика захвата трафика хотспота, KD9CPB — kd9cpb.com
- Документация Wireshark по Lua-диссекторам — wiki.wireshark.org
- dmr-kaitai: формальные описания Homebrew и MMDVM — github.com/OK-DMR/dmr-kaitai
- ok-dmrlib: программный разбор содержимого бёрстов — github.com/OK-DMR/ok-dmrlib
Настроили рацию — заходите в эфир: свой мастер, хотспоты и приложение с DMR прямо в телефоне.
Войти в портал