Анализ VoIP-трафика с помощью утилиты sngrep: чтение SIP-диаграмм вызовов
- Необходимость быстрой локализации причин отбоя звонков (
404 Not Found,486 Busy,503 Service Unavailable) в реальном времени. - Неудобство анализа тяжелых дампов
tcpdumpчерез Wireshark на удаленных серверах. - Сложности при отслеживании цепочки прохождения вызова через B2BUA, SBC и транзитные провайдеры.
- Скрытые проблемы с несовпадением кодеков (SDP Audio Codec Negotiation).
1. Установка утилиты sngrep на сервер телефонии
# Debian / Ubuntu
apt-get install -y sngrep
# RHEL / CentOS / Rocky Linux
dnf install -y epel-release && dnf install -y sngrep
# Сборка из исходников (если нет в репозитории)
git clone https://github.com/irontec/sngrep
cd sngrep && ./bootstrap.sh && ./configure && make && make install2. Запуск и фильтрация сетевых интерфейсов
# Базовый запуск с захватом всех интерфейсов
sngrep
# Захват только на определенном интерфейсе и порту
sngrep -d eth0 port 5060
# Захват без конвертации IP в DNS имена (работает быстрее)
sngrep -N -d any
# Захват только SIP сообщений типа REGISTER и INVITE
sngrep -c -O /tmp/voip_capture.pcap3. Навигация и интерактивный анализ SIP-диаграмм
- Используйте клавиши
↑/↓для выбора нужного вызова из списка транзакций. - Нажмите Enter для перехода в режим Call Flow Diagram (визуальное отображение стрелок между IP-адресами).
- Используйте клавиши F2 или S для сохранения выбранного диалога в файл
.pcap. - Нажмите F7 для открытия расширенного фильтра (Filter by Caller, Callee, SIP Method, Payload).
- Нажмите F3 для поиска текстовой строки (Call-ID, IP-адрес, номер телефона).
4. Анализ SDP секции (Session Description Protocol)
В окне Call Flow выберите пакет INVITE или 200 OK и нажмите F8 для просмотра сырого текста заголовков:
v=0
o=root 1700000000 1700000000 IN IP4 203.0.113.50
s=Asterisk PBX
c=IN IP4 203.0.113.50
t=0 0
m=audio 14234 RTP/AVP 8 0 101
a=rtpmap:8 PCMA/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:101 telephone-event/8000
a=sendrecvПроверьте: совпадают ли разрешенные кодеки (rtpmap) и доступен ли указанный в строке c=IN IP4 адрес для приема голосовых RTP пакетов.
5. Фоновый сбор дампа без графического интерфейса
# Сбор аномальных вызовов в фоновом режиме по условию ошибки (Response Code >= 400)
sngrep -q -O /var/log/asterisk/failed_calls.pcap "(sip.Response-Code >= 400)" Частые вопросы (FAQ)
Как в sngrep отобразить только вызовы с ошибками?
В главном окне нажмите F7 (Filter) и в поле 'Call State' выберите значение 'COMPLETED' или укажите конкретный код ответа (например, 403, 404, 503) в строке поиска.
Может ли sngrep расшифровывать SIP TLS трафик?
Да, если запустить sngrep с указанием приватного ключа сервера: sngrep -k /etc/asterisk/keys/asterisk.key port 5061 (при условии использования алгоритмов шифрования без Diffie-Hellman Ephemeral / RSA Exchange).
Влияет ли работа sngrep на производительность высоконагруженной АТС?
При нагрузке более 150-200 одновременно активных каналов sngrep начинает потреблять много оперативной памяти под хранение истории диалогов. На High-Load нодах используйте запуск только с флагом -c (без отображения) или фильтрацию по порту/хосту.
Как экспортировать выделенный диалог вызова для анализа в Wireshark?
Выделите вызов в списке, нажмите F2 (Save), выберите 'Selected Call' и задайте путь к файлу (например, /tmp/call_debug.pcap).