Сергей Маликов
16.03.2020
22898

Траблшутинг с помощью tcpdump, ngrep, sipgrep, sngrep

Определение используемых портов Посмотреть использующиеся порты SIP, IAX можно выполнив поиск по конфигурационным файлам: или выполнив команду Посмотреть используемые порты для sip и протокол(параметр transport), установленные в конфигурационных файлах и вывести окружающий контекст (20 строк) Посмотреть используемые порты rtp (поиск нескольких значений по всем файлам в директории): В примере используемый по умолчанию диапазон rtp портов […]

Определение используемых портов

Стандартные порты в IP телефонии для голоса и сигнализации: 5060 (udp) – SIP(сигнализация), в последных версиях FreePBX стандартный SIP порт 5160 (udp), 10000-20000 (udp) — RTP(голос), 5061(tcp) — TLS 4569 (udp) – IAX(и голос и сигнализация). Но они могут быть также переопределены в конфигурационных файлах (глобально или для отдельного транка/экстеншена). Необходимо это уточнить перед запуском дампов.

Посмотреть использующиеся порты SIP, IAX можно выполнив поиск по конфигурационным файлам:

grep "^port=" -iRI /etc/asterisk/* - найдет все используемые порты

или выполнив команду

asterisk -rx "sip show settings" | grep "Bindaddress:"  - покажет глобальные настройки(Bindaddress:bindport — прослушиваемый адрес:прослушиваемый порт)
Используемые порты и глобальные настройки
Используемые порты и глобальные настройки

Посмотреть используемые порты для sip и протокол(параметр transport), установленные в конфигурационных файлах и вывести окружающий контекст (20 строк)

grep "^port=|^transport="  -EriRI /etc/asterisk/sip* -C 20
Используемые порты, протокол, контекст
Используемые порты, протокол, контекст

Посмотреть используемые порты rtp (поиск нескольких значений по всем файлам в директории):

grep   "^rtpstart|^rtpend"  -EriRI /etc/asterisk/*

В примере используемый по умолчанию диапазон rtp портов (10000-20000) переопределен в диапазон (36600-39989).

Если используется FreePBX/Elastix то можно увидеть, что некоторые файлы оканчиваются на «additional». Суффикс «additional» означает, что правила записываются в конфигурационный файл только с помощью веб-интерфейса, по-другому вносить в него изменения не нужно.

Используемые RTP порты
Используемые RTP порты

tcpdump
Создание полного дампа. Запись по портам 5060 (сигнализация) и 10000-2000(стандартные, голос) в один файл:

tcpdump -i any -vvvv port 5060 or  portrange 10000-20000 -s 0 -w dump.pcap

Записывать все в один и тот же дамп можно, но, если звонков слишком много, то необходимо писать в разные файлы, иначе для открытия огромного дампа может не хватить памяти.

Запуск дампов, пишушихся с определенным интервалом по порту 5060:

tcpdump -i any -G 600  -i any -vvvv port 5060   -w 'dump_%d-%m_%Y__%H_%M.pcap'

-i — указывается имя интерфейса (any — все)
-G — время в секундах (например 600 сек — 10 мин)

При запуске с интервалом, определенным параметром -G будут создаваться отдельные дампы.
Просмотр дампа /root/dump_file.pcap (вывод его в консоль) с помощью утилиты tcpdump

tcpdump -qns 0 -A -r /root/dump_26-02_2020__18_45.pcap
Просмотр дампа
Просмотр дампа
После удаления дампов из планировщика задач cron, необходимо проверить остался ли запущенный процесс в активных командой ps aux | grep dump , где «dump» — часть имени скрипта, пишущего дампы или команды. Если процесс остался активен после удаления дампов из планировщика его необходимо завершить командой kill.
Поиск запущенных дампов, завершение процесса
Поиск запущенных дампов, завершение процесса

По выведенному в консоль трейсу можно выполнить поиск, с выводом также и некоторые соседние строки, окружающие найденную подстроку (-A –(after) количество строк вниз, -B —(before) количество строк вверх, -C или -число – (context) до и после):

tcpdump -qns 0 -A -r log_17-02_2020__18_27.pcap | grep "115" -A 20 -B 20
Поиск по дампу
Поиск по дампу

Вывод дампа сразу на просмотр в консоль

Просмотр дампов inbound, outbound в tcpdump
Просмотр дампов inbound, outbound в tcpdump

Исходящий трафик

tcpdump -i any portrange 5060-5061 and outbound -vv -s 0

Входящий трафик

tcpdump -i any portrange 5060-5061 and inbound -vv -s 0

Просмотр дампов inbound, outbound в sngrep
Просмотр дампов inbound, outbound в sngrep

Статья об отладке неисправностей соединения телефонных аппаратов с Asterisk с помощью утилиты tcpdump (подробно).

sngrep

Утилита для чтения, просмотра, сохранения sip/rtp трафика.

Поддерживает udp,tcp, tls.

Просмотр с помощью sngrep всех всего sip трафика

sngrep 

Просмотр с помощью sngrep только сообщений invite

sngrep -c
Просмотр с помощью sngrep только сообщений invite
Просмотр с помощью sngrep только сообщений invite

Подробнее в статьях об утилите sngrep на сайте:

Статья об установке/настройке sngrep
Полный обзор sngrep

ngrep

Ngrep – утилита, позволяющая записывать, выводить и фильтровать (как из записанного дампа, так и текущий) различный трафик.

Установка:

yum install epel-release
yum install ngrep

Основные опции
-W сохранить форматирование строк
-q “тихий режим”, скрывающий отображение других пакетов
-d определение прослушиваемого сетевого интерфейса

ngrep -q -d any -p -W byline '334'
Ngrep фильтрация по наличию в строке YATE
Ngrep фильтрация по наличию в строке YATE

С помощью ngrep также можно записывать дампы в файл и далее также работать с записанным дампом(с помощью ключа -О).

Записать трафик на интерфейсе eth0 в текущую директорию

ngrep -O ./ngrep.dump -d eth0 -T

Фильтрация трафика из записанного в текущей директории дампа по хосту(192.168.32.2 ) и порту(5060)

ngrep -I ./ngrep.dump -q '.' 'host 192.168.32.2 and port 5060'
Ngrep запись дампа и работа с ним
Ngrep запись дампа и работа с ним

sipgrep

Отличается от ngrep более глубокой поддержкой sip протокола. Позволяет прослушивать только sip трафик.

Установка зависимостей:

yum install libpcap-devel pcre-devel m4 automake autoconf libtool

Установка sipgrep:

cd /usr/src
git clone https://github.com/sipcapture/sipgrep.git 
cd sipgrep
./build.sh (optional)
./configure
make && make install

Вывод всего sip трафика

sipgrep -d any

Sipgrep вывод трафика на интерфейсе eth0 с(-f) / на(-t) номер и вывод отчета по диалогу (-G)

sipgrep -d eth0 -f 333 -G
sipgrep -d eth0 -t 89192990000 –G
Sipgrep получение пакетов с(-f) / на(-t) номер
Sipgrep получение пакетов с(-f) / на(-t) номер

В отчете sipgrep, в поле REASON можно увидеть причину завершения диалога. В зависимости от кода запросы подразделяются на:
1xx: Информационные ответы – запрос получен, запрос обрабатывается;
2xx: Успех выполнения запроса – запрос был получен, понят, принят в обработку;
3xx: Переадресация – для завершения запроса необходимо, выполнить следующие действия;
4xx: Ошибка Клиента – запрос имеет некорректный синтаксис(информацию) или запрос не может быть выполнен на данном сервере;
5xx: Ошибка Сервера – сервер не в состоянии выполнить корректный запрос;
6xx: Глобальная Ошибка – запрос не может быть выполнен на любом сервере.

На скриншоте звонок с 333 на 334 был завершен по причине 487 (Request Terminated) – происходит при отмене вызова.

Sipgrep код ответа
Sipgrep код ответа

Смотрите также примеры диагностики и решения проблем в других статьях на сайте.

Asterisk, SIP, отсутствие early media из-за повторного ответа “183 Session Progress” без SDP

Анализ SIP пакета, на примерах рабочего вызова и со сбоем

Wireshark – анализ RTP трафика. Тишина в RTP канале.

Книга 101 функция Asterisk
Познакомьтесь с возможностями Asterisk. Найдите инструменты, которые помогут вашей компании развиваться.
Скачать книгу
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии

Остались вопросы?

Я - Виталий Шелест, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

VoIP оборудование


ближайшие курсы

10 доводов в пользу Asterisk

Распространяется бесплатно.

Asterisk – программное обеспечение с открытым исходным кодом, распространяется по лицензии GPL. Следовательно, установив один раз Asterisk вам не придется дополнительно платить за новых абонентов, подключение новых транков, расширение функционала и прочие лицензии. Это приближает стоимость владения станцией к нулю.

Безопасен в использовании.

Любое программное обеспечение может стать объектом интереса злоумышленников, в том числе телефонная станция. Однако, сам Asterisk, а также операционная система, на которой он работает, дают множество инструментов защиты от любых атак. При грамотной настройке безопасности у злоумышленников нет никаких шансов попасть на станцию.

Надежен в эксплуатации.

Время работы серверов некоторых наших клиентов исчисляется годами. Это значит, что Asterisk работает несколько лет, ему не требуются никакие перезагрузки или принудительные отключения. А еще это говорит о том, что в районе отличная ситуация с электроэнергией, но это уже не заслуга Asterisk.

Гибкий в настройке.

Зачастую возможности Asterisk ограничивает только фантазия пользователя. Ни один конструктор шаблонов не сравнится с Asterisk по гибкости настройки. Это позволяет решать с помощью Asterisk любые бизнес задачи, даже те, в которых выбор в его пользу не кажется изначально очевидным.

Имеет огромный функционал.

Во многом именно Asterisk показал какой должна быть современная телефонная станция. За многие годы развития функциональность Asterisk расширилась, а все основные возможности по-прежнему доступны бесплатно сразу после установки.

Интегрируется с любыми системами.

То, что Asterisk не умеет сам, он позволяет реализовать за счет интеграции. Это могут быть интеграции с коммерческими телефонными станциями, CRM, ERP системами, биллингом, сервисами колл-трекинга, колл-бэка и модулями статистики и аналитики.

Позволяет телефонизировать офис за считанные часы.

В нашей практике были проекты, реализованные за один рабочий день. Это значит, что утром к нам обращался клиент, а уже через несколько часов он пользовался новой IP-АТС. Безусловно, такая скорость редкость, ведь АТС – инструмент зарабатывания денег для многих компаний и спешка во внедрении не уместна. Но в случае острой необходимости Asterisk готов к быстрому старту.

Отличная масштабируемость.

Очень утомительно постоянно возвращаться к одному и тому же вопросу. Такое часто бывает в случае некачественного исполнения работ или выбора заведомо неподходящего бизнес-решения. С Asterisk точно не будет такой проблемы! Телефонная станция, построенная на Asterisk может быть масштабируема до немыслимых размеров. Главное – правильно подобрать оборудование.

Повышает управляемость бизнеса.

Asterisk дает не просто набор полезных функций, он повышает управляемость организации, качества и комфортности управления, а также увеличивает прозрачность бизнеса для руководства. Достичь этого можно, например, за счет автоматизации отчетов, подключения бота в Telegram, санкционированного доступа к станции из любой точки мира.

Снижает расходы на связь.

Связь между внутренними абонентами IP-АТС бесплатна всегда, независимо от их географического расположения. Также к Asterisk можно подключить любых операторов телефонии, в том числе GSM сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.