نرم افزارsngrep یک ابزار خط فرمان برای مشاهده و دیباگ کردن ترافیک SIP در VoIP است. این ابزار به شما امکان میدهد بستههای SIP را رصد کنید، لاگها را بررسی کنید، و مشکلات شبکهای را تشخیص دهید.
نصب sngrep
https://testforum.mysup.ir/t/topic/35
برای اجرای ابزار کافیست دستور زیر را اجرا کنید:
sngrep
خواندن دقیق یک درخواست SIP در
sngrep
هنگامی که sngrep را اجرا کنید، یک لیست از تماسها (Sessions) میبینید. برای تحلیل یک تماس:
- با کلیدهای جهتی (↑ ↓) روی تماس موردنظر بروید.
 - کلید 
Enterرا بزنید تا تمام پیامهای SIP بین دو طرف نمایش داده شود. - در این صفحه، یک نمایش گرافیکی از ارتباط SIP (SIP Flow) را مشاهده میکنید.
 برای بررسی دقیق یک پیام SIP:
 روی پیام موردنظر بروید و دوباره Enterبزنید.
 در اینجا میتوانید هدرها، پارامترها و محتوای SIP را مشاهده کنید.
 
بررسی پارامترهای موجود در درخواست SIP
هر پیام SIP شامل چند بخش مهم است:
 خط اول (Request Line یا Status Line)
 فرمت درخواستهای SIP:
INVITE sip:1001@192.168.1.10 SIP/2.0
 فرمت پاسخهای SIP:
SIP/2.0 200 OK
در اینجا:
INVITEنوع درخواست است.sip:1001@192.168.1.10آدرس مقصد تماس است.SIP/2.0نسخه پروتکل SIP را مشخص میکند.
 هدرهای مهم در پیامهای SIP
| هدر | توضیح | 
|---|---|
| Via | مشخص میکند پیام از کجا آمده و چگونه باید پاسخ داده شود. | 
| From | نشان میدهد چه کسی تماس را برقرار کرده است. | 
| To | نشان میدهد تماس به چه کسی ارسال شده است. | 
| Call-ID | یک شناسهی منحصربهفرد برای هر تماس SIP | 
| CSeq | شماره ترتیبی درخواست (برای جلوگیری از حملات تکرار) | 
| Contact | آدرس شبکهای که برای پاسخها استفاده میشود. | 
| User-Agent | نشان میدهد که کلاینت SIP چه نوع نرمافزاری است. | 
| Content-Length | مقدار دادهای که در بخش Body پیام وجود دارد. | 
 نمونه یک پیام SIP  در sngrep
INVITE sip:1001@192.168.1.10 SIP/2.0
Via: SIP/2.0/UDP 192.168.1.5:5060;branch=z9hG4bK7f8e
Max-Forwards: 70
From: "User A" <sip:1000@192.168.1.5>;tag=123456
To: <sip:1001@192.168.1.10>
Call-ID: 8sdj23sd9sdf@example.com
CSeq: 102 INVITE
Contact: <sip:1000@192.168.1.5:5060>
User-Agent: Asterisk PBX
Content-Type: application/sdp
Content-Length: 129
مهمترین سوییچها و کاربردهای پیشرفته در
sngrep
نمایش راهنما و گزینههای sngrep :
 root@myboy:~# sngrep -h or --history
 نمایش نسخه sngrep :
root@myboy:~# sngrep -v or version
 شنود روی اینترفیس خاص (مثلاً eth0) :
root@myboy:~# sngrep -d eth0 or --device
 خواندن لاگهای SIP از فایل PCAP :
root@myboy:~# sngrep -I calls.pcap or --output calls.pcap
 ذخیره پیامهای SIP در فایل PCAP :
root@myboy:~# sngrep -O log.pcap or --input calls.pcap
 نمایش فقط پیامهای خاص (مثلاً INVITE) :
root@myboy:~# sngrep -t INVITE
 ضبط بستههای RTP همراه با SIP :
root@myboy:~# sngrep -r or --rtp
 اجرای sngrep بدون نمایش خروجی در کنسول (در پسزمینه) :
root@myboy:~# sngrep -q capture.pcap
 نمایش تعداد پیامهای ضبط شده :
root@myboy:~# sngrep -c or --calls
 جستجوی حساسیتناپذیر به حروف بزرگ و کوچک :
root@myboy:~# sngrep -i "User-Agent"
نمایش تمام پیامهای SIP بهصورت تکخطی :
root@myboy:~# sngrep -A
 پاک کردن دیالوگهای قدیمی هنگام رسیدن به محدودیت :
root@myboy:~# sngrep -l 500 -R or --rotate
 ارسال دادههای ضبطشده به سرور HOMER SIPCAPTURE :
root@myboy:~# sngrep -H udp:192.168.1.100:9060 or --eep-send
 گوش دادن به ترافیک SIP از یک منبع HOMER :
root@myboy:~# sngrep -L udp:0.0.0.0:9060
تحلیل خطاهای رایج در SIP با
sngrep
| کد SIP | توضیح خطا | راه حل | 
|---|---|---|
403 Forbidden | 
سرور درخواست شما را رد کرده است. | بررسی مجوزها و ACL | 
404 Not Found | 
شمارهای که تماس گرفتهاید وجود ندارد. | بررسی تنظیمات SIP و دایرکتوری شمارهها | 
486 Busy Here | 
کاربر مشغول است. | بررسی اشغالی کاربر یا تماسهای همزمان | 
487 Request Terminated | 
درخواست کنسل شده است. | ممکن است کاربر تماس را قطع کرده باشد. | 
500 Server Internal Error | 
خطای داخلی سرور SIP | بررسی لاگهای Asterisk یا FreeSWITCH | 
  مشاهده پیامهای حاوی خطاهای SIP (مثلاً 403, 404, 500, 486) :
root@myboy:~#sngrep -t 4XX,5XX
  بررسی REGISTER کاربران (REGISTER Messages) :
 root@myboy:~#sngrep -t REGISTER 
 بررسی پایان مکالمات (BYE Messages) :
root@myboy:~#sngrep -t BYE
بررسی گزینههای مربوط به تنظیمات
sngrep
 نرم افزار sngrep از فایلهای تنظیمات برای ذخیره پیکربندی پیشفرض خود استفاده میکند.
 این گزینهها برای بررسی، تغییر، یا بیاثر کردن تنظیمات پیشفرض استفاده میشوند.
 چاپ تنظیمات فعال sngrep و خروج از برنامه :
root@myboy:~# sngrep -D or --dump-config
این اطلاعات نشان میدهند که چه تنظیماتی فعال هستند و sngrep چطور اجرا خواهد شد.
 اجرای sngrep  با استفاده از فایل تنظیمات سفارشی :
root@myboy:~# sngrep -f /etc/sngrep_custom.conf or --config
این دستور sngrep را با تنظیمات فایل sngrep_custom.conf اجرا میکند.
 اگر بخواهید مثلا رنگها، فیلترهای خاص، یا اینترفیسهای پیشفرض را تغییر دهید، این روش مناسب است.
ما اینجا دیگه وارد بحث ساخت فایل و تنظیمات نمیشیم.
 اجرای sngrep بدون تنظیمات پیشفرض :
root@myboy:~#sngrep -F
 این دستور sngrep را بدون تنظیمات /etc/sngrep_custom.conf اجرا میکند، یعنی همه مقادیر به حالت پیشفرض برنامه بازمیگردند.

