Product SiteDocumentation Site

10.8. ابزار بررسی شبکه

زمانی که یک برنامه تحت شبکه درست کار نمی‌کند، بسیار مهم است که از شیوه فعالیت آن اطلاع داشته باشیم. حتی در زمانی که همه چیزی بخوبی کار می‌کند، بررسی شبکه ما را از عملکرد صحیح آن با خبر می‌سازد. چندین ابزار مختلف در این زمینه وجود دارد که هر کدام در سطح جداگانه‌ای فعالیت می‌کند.

10.8.1. بررسی محلی: netstat

بیایید ابتدا دستور netstat را بررسی کنیم (در بسته net-tools)؛ این ابزار یک خلاصه وضعیت لحظه‌ای از فعالیت شبکه نمایش می‌دهد. زمانی که بدون آرگومان فراخوانی شود، این دستور فهرستی از تمام ارتباطات باز را نمایش می‌دهد؛ این فهرست می‌تواند بسیار طولانی باشد چرا که شامل بسیاری از سوکت‌های یونیکس (مورد استفاده فرآیندهای پس‌زمینه) است که اصلا کاری با شبکه ندارند (برای نمونه، ارتباطات dbus یا ترافیک X11 ارتباطات بین فایل‌سیستم‌های مجازی و محیط گرافیکی هستند).
فراخوانی‌های متداول شامل گزینه‌هایی است که عملکرد netstat را تغییر می‌دهند. متداول‌ترین گزینه‌ها عبارتند از:
  • -t، که با فیلترکردن خروجی تنها ارتباطات TCP را شامل می‌شود؛
  • -u، که به شیوه‌ای مشابه برای ارتباطات UDP استفاده می‌شود؛ این گزینه‌ها با یکدیکر سازگار نبوده و استفاده یکی از آن‌ها کافی است تا ارتباطات دامنه یونیکس نمایش داده نشوند؛
  • -a، برای فهرست کردن سوکت‌های منتظر (آن‌هایی که برای ارتباط دریافتی انتظار می‌کشند)؛
  • -n، برای نمایش نتایج به صورت عددی: نشانی‌های IP (بدون دخالت DNS)، شماره‌های درگاه (بدون نام مستعار تعریف شده در /etc/services) و شناسه‌های کاربری (بدون نام کاربری)؛
  • -p، برای فهرست‌کردن فرآیندهای درگیر؛ این گزینه زمانی مفید است که netstat به عنوان root اجرا شود، چرا که کاربران عادی تنها می‌توانند فرآیندهای خود را مشاهده کنند؛
  • -c، برای تازه‌سازی فهرست خروجی به صورت مداوم.
سایر گزینه‌ها که در صفحه راهنمای netstat(8) مستندسازی شده‌اند، کنترل بسیار بیشتری را فراهم می‌کنند. در عمل، پنج گزینه اول به اندازه‌ای پرکاربرد هستند که مدیران شبکه و سیستم از عبارت netstat -tupan برای اشاره به آن‌ها استفاده می‌کنند. به طور معمول، نتایج قابل مشاهده در یک رایانه معمولی مانند زیر هستند:
# netstat -tupan
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      397/rpcbind     
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      431/sshd        
tcp        0      0 0.0.0.0:36568           0.0.0.0:*               LISTEN      407/rpc.statd   
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      762/exim4       
tcp        0    272 192.168.1.242:22        192.168.1.129:44452     ESTABLISHED 1172/sshd: roland [
tcp6       0      0 :::111                  :::*                    LISTEN      397/rpcbind     
tcp6       0      0 :::22                   :::*                    LISTEN      431/sshd        
tcp6       0      0 ::1:25                  :::*                    LISTEN      762/exim4       
tcp6       0      0 :::35210                :::*                    LISTEN      407/rpc.statd   
udp        0      0 0.0.0.0:39376           0.0.0.0:*                           916/dhclient    
udp        0      0 0.0.0.0:996             0.0.0.0:*                           397/rpcbind     
udp        0      0 127.0.0.1:1007          0.0.0.0:*                           407/rpc.statd   
udp        0      0 0.0.0.0:68              0.0.0.0:*                           916/dhclient    
udp        0      0 0.0.0.0:48720           0.0.0.0:*                           451/avahi-daemon: r
udp        0      0 0.0.0.0:111             0.0.0.0:*                           397/rpcbind     
udp        0      0 192.168.1.242:123       0.0.0.0:*                           539/ntpd        
udp        0      0 127.0.0.1:123           0.0.0.0:*                           539/ntpd        
udp        0      0 0.0.0.0:123             0.0.0.0:*                           539/ntpd        
udp        0      0 0.0.0.0:5353            0.0.0.0:*                           451/avahi-daemon: r
udp        0      0 0.0.0.0:39172           0.0.0.0:*                           407/rpc.statd   
udp6       0      0 :::996                  :::*                                397/rpcbind     
udp6       0      0 :::34277                :::*                                407/rpc.statd   
udp6       0      0 :::54852                :::*                                916/dhclient    
udp6       0      0 :::111                  :::*                                397/rpcbind     
udp6       0      0 :::38007                :::*                                451/avahi-daemon: r
udp6       0      0 fe80::5054:ff:fe99::123 :::*                                539/ntpd        
udp6       0      0 2001:bc8:3a7e:210:a:123 :::*                                539/ntpd        
udp6       0      0 2001:bc8:3a7e:210:5:123 :::*                                539/ntpd        
udp6       0      0 ::1:123                 :::*                                539/ntpd        
udp6       0      0 :::123                  :::*                                539/ntpd        
udp6       0      0 :::5353                 :::*                                451/avahi-daemon: r
همانطور که انتظار می‌رفت، این فهرست شامل ارتباطات جاری سیستم است از جمله دو ارتباط SSH و برنامه‌هایی که منتظر دریافت ارتباطات هستند (که به عنوان LISTEN آمده‌اند)، مانند سرور ایمیل Exim4 که به درگاه ۲۵ گوش می‌کند.

10.8.2. بررسی راه‌دور: nmap

nmap (در بسته‌ای با همین نام) به نوعی معادل راه‌دور netstat به حساب می‌آید. می‌تواند به پویش مجموعه‌ای از درگاه‌های “شناخته-شده” برای یک یا چند سرور راه‌دور بپردازد و درگاه‌هایی که برنامه‌های مختلف به آن‌ها پاسخ می‌دهند را نمایش می‌دهد. علاوه بر این، nmap می‌تواند برخی از این برنامه‌ها را نیز تشخیص دهد، گاهی اوقات حتی نسخه‌های آنان را. از آنجا که این ابزار به صورت راه‌دور کار می‌کند، نمی‌تواند اطلاعات مربوط به فرآیندها یا کاربران را نمایش دهد؛ با این حال می‌تواند به صورت همزمان روی چندین هدف اجرا شود.
یک فراخوانی معمول nmap تنها از گزینه -A استفاده می‌کند (به منظور یافتن نسخه نرم‌افزار سرور که روی آن اجرا می‌شود) به همراه یک یا چند نشانی IP یا نام‌های DNS رایانه‌هایی که قصد پویش آن‌ها را دارد. بسیاری گزینه‌های مختلف وجود دارد که به کنترل بیشتر عملکرد nmap کمک می‌کنند؛ لطفا به مستندات صفحه راهنمای nmap(1) مراجعه کنید.
# nmap mirtuel

Starting Nmap 6.47 ( http://nmap.org ) at 2015-03-09 16:46 CET
Nmap scan report for mirtuel (192.168.1.242)
Host is up (0.000013s latency).
rDNS record for 192.168.1.242: mirtuel.internal.placard.fr.eu.org
Not shown: 998 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
111/tcp open  rpcbind

Nmap done: 1 IP address (1 host up) scanned in 2.41 seconds
# nmap -A localhost

Starting Nmap 6.47 ( http://nmap.org ) at 2015-03-09 16:46 CET
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000013s latency).
Other addresses for localhost (not scanned): 127.0.0.1
Not shown: 997 closed ports
PORT    STATE SERVICE VERSION
22/tcp  open  ssh     OpenSSH 6.7p1 Debian 3 (protocol 2.0)
|_ssh-hostkey: ERROR: Script execution failed (use -d to debug)
25/tcp  open  smtp    Exim smtpd 4.84
| smtp-commands: mirtuel Hello localhost [127.0.0.1], SIZE 52428800, 8BITMIME, PIPELINING, HELP, 
|_ Commands supported: AUTH HELO EHLO MAIL RCPT DATA NOOP QUIT RSET HELP 
111/tcp open  rpcbind 2-4 (RPC #100000)
| rpcinfo: 
|   program version   port/proto  service
|   100000  2,3,4        111/tcp  rpcbind
|   100000  2,3,4        111/udp  rpcbind
|   100024  1          36568/tcp  status
|_  100024  1          39172/udp  status
Device type: general purpose
Running: Linux 3.X
OS CPE: cpe:/o:linux:linux_kernel:3
OS details: Linux 3.7 - 3.15
Network Distance: 0 hops
Service Info: Host: mirtuel; OS: Linux; CPE: cpe:/o:linux:linux_kernel

OS and Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 11.54 seconds
همانطور که انتظار می‌رفت، برنامه‌های SSH و Exim4 فهرست شده‌اند. نکته اینکه همه برنامه‌ها به همه نشانی‌های IP گوش فرا نمی‌دهند؛ از آنجا که Exim4 تنها از طریق رابط lo قابل دسترس است، تنها زمانی نمایش می‌یابد که تحلیل localhost صورت بگیرد و نه تحلیل mirtuel (که به رابط eth0 در همان رایانه نگاشت شده است).

10.8.3. اسنیفرها: tcpdump و wireshark

بعضی وقت‌ها، نیاز است بدانیم چه چیزی به صورت بسته به بسته از شبکه عبور می‌کند. این موارد شامل یک “تحلیلگر فریم” هستند که به صورت کلی‌تر با نام sniffer شناخته می‌شوند. چنین ابزاری به مشاهده بسته‌های عبوری از یک رابط شبکه می‌پردازد و آن‌ها را به شیوه‌ای مرتب و خودمانی نمایش می‌دهد.
ابزار قدرتمند در این زمینه tcpdump است که به عنوان یک ابزار استاندارد در طیف گسترده‌ای از پلتفرم‌ها موجود است. این ابزار امکان بسیاری از فرآیندهای مرتبط با شبکه را می‌دهد، اما شیوه نمایش این ترافیک کمی عجیب و غریب است. بنابراین به توضیح بیشتر آن نمی‌پردازیم.
یک ابزار جدیدتر، wireshark (در بسته wireshark) به عنوان مرجع تحلیل ترافیک شبکه به دلیل ماژول‌های بسیاری که در فرآیند تحلیل بسته‌ها کمک می‌کنند، تبدیل شده است. بسته‌ها به صورت گرافیکی و به ترتیب قرار گرفتن در لایه‌های مختلف شبکه نمایش داده می‌شوند. این امر به کاربر کمک می‌کند تا به صورت بصری به بررسی بسته‌ها بپردازد. برای نمونه، بسته‌ای که شامل درخواست HTTP است، wireshark آن را به صورت جداگانه به همراه اطلاعات مرتبط با هر لایه شبکه نمایش می‌دهد و در نهایت به نمایش خود درخواست HTTP می‌رسد.
تحلیلگر ترافیک شبکه wireshark

شكل 10.1. تحلیلگر ترافیک شبکه wireshark

در نمونه ما، بسته‌هایی که از طریق SSH انتقال می‌یابند فیلتر شده‌اند (با استفاده از فیلتر !tcp.port == 22). بسته‌ای که هم اکنون نمایش یافت در لایه HTTP قرار داشت.