SNgrep уникальный и очень полезный инструмент, для анализа и захвата SIP трафика, построения трейсов и системы фильтров SIP сообщений. Цель данного инструмента, сделать процесс обучения или отладки SIP протокола, проще и понятнее. SNgrep позволяет отображать потоки SIP – вызова (sip flow) прямо в консоли вашего сервера. SNgrep покажет SIP – обмен сообщениями в удобной и читаемой форме. SNgrep это tcpdump (или wireshark под Linux), но только для VoIP. Данная утилита станет незаменима VoIP инженерам, для диагностики систем телефонии.
Особенности:
- Захват SIP пакетов от устройств или чтение из PCAP файла;
- Поддержка UDP, TCP и TLS(частично) транспортов;
- Позволяет использовать фильтрацию BPF (Berkeley Packet Filter) пакетов;
- Cохранять перехваченные пакеты в файле PCAP.
Установка SNgrep
Необходимые библиотеки и зависимости для операционной системы CentOS:
1 |
yum -y install ncurses-devel make libpcap-devel pcre-devel openssl-devel git gcc autoconf automake |
Зависимости для Debian и Ubuntu:
1 |
apt-get install git autoconf automake gcc make libncurses5-dev libpcap-dev libssl-dev libpcre3-dev |
Установка и сборка программы:
1 2 3 4 5 6 7 |
cd /usr/src git clone https://github.com/irontec/sngrep cd sngrep ./bootstrap.sh ./configure make make install |
Установка SNgrep из пакетов в CentOS возможна из репозитория irontec.
Добавим irontec репозиторий. Для этого, создадим файл с именем sngrep.repo
в директории /etc/yum.repos.d
:
1 |
touch /etc/yum.repos.d/sngrep.repo |
Добавляем в файл следующие строки:
1 2 3 |
[irontec] name=Irontec RPMs repository baseurl=http://packages.irontec.com/centos/$releasever/$basearch/ |
Затем импортируем публичный ключ от irontec:
1 |
rpm --import http://packages.irontec.com/public.key |
Все готово к установке. Даем следующие команды:
1 2 |
yum update yum install sngrep |
В случае использовании UTF-8 кодировки и русских символов, иногда необходимо прописать переменную:
1 2 |
echo export NCURSES_NO_UTF8_ACS=1 >> /etc/environment source /etc/environment |
И запустить приложение:
1 |
sngrep |
Использование SNgrep
Как только вы попадете в меню управления утилитой, перед вами будет отражен список VoIP пакетов, которые обрабатывает Ваш сервер:
Нажав на Enter вы сможете более детально изучить каждое сообщение:
Выполнить захват трафика в файл PCAP:
1 |
sngrep -d eth0 -O name.pcap port 5060 and udp |
Отрывать файл pcap сделанный ngrep, tcpdump, wireshark и другими анализаторами:
1 |
sngrep -I name.pcap |
При детализации звонка, можно нажать F2/F3 для получения SDR/RTP информации. Для выхода и возврата в предыдущее меню нажмите Esc. Если кратко, следующие опции доступны в базовом интерфейса SNgrep:
- F1 — открыть функциональный помощник;
- F2 — сохранить собранный дамп в указанный файл;
- F3 — отфильтровать данные по указанной строке;
- F4 — показать выбранный расширенный call – flow (схема звонка, с указанием всех этапов его инициации);
- F5 — удалить собранный дамп;
- F6 — показать выбранный дамп в текстовом формате (без визуализации стрелочками, только сухие SIP – сообщения);
- F7 — показать опции фильтрации (фильтровать можно по полю From/To, по источнику и назначению звонка, а так же по различным данным из информационного сегмента поля полезной нагрузки, то есть не из заголовка). Помимо прочего, есть возможность отмечать типы сообщения, такие как REGISTER, INVITE, OPTIONS и прочие;
- F8 — показать настройки, среди который подсветка синтаксиса, фон и прочие;
- F10 — настройка отображаемых параметров (такие как From/TO, индекс, метод и прочие);
- Esc — выйти из sngrep/в предыдущее меню;
- Enter -посмотреть call-flow выбранного пакета;
- Space (пробел) — выделить нужный сегмент;
- i/I — фильтрация только по сообщения типа INVITE;
- p — поставить на паузу сбор пакетов;
Описание ключей SNgrep:
1 2 3 4 5 6 7 8 9 10 |
-h or --help: помощь -V or --version: вывести информацию о версии; -I or --input : прочитать данные из файла filename.pcap; -O or --output : cохраните все перехваченные пакеты в файл PCAP; -d or --device : захват трафик с определенного интерфейса ( по умолчанию sngrep захватывает трафик со всех интерфейсов); -k or --keyfile : использовать private keyfile файл для расшифровки перехваченных TLS пакетов; -c or --calls : отображение только диалоговых окон, начиная с запроса invite; -l or --limit : изменить ограничения захвата трафика; -N or --no-interface : захват трафика без указания интерфейса; -q or --quiet : не отображать захваченные пакеты в режиме без интерфейса. |
С помощью использования системы фильтров (F7), можно выбрать тот или иной диалог для анализа и построения трейса:
SNgrep — отличный и незаменимый инструмент VoIP инженера!