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 инженера!
                
                                                                




