زمانی که یک برنامه تحت شبکه درست کار نمیکند، بسیار مهم است که از شیوه فعالیت آن اطلاع داشته باشیم. حتی در زمانی که همه چیزی بخوبی کار میکند، بررسی شبکه ما را از عملکرد صحیح آن با خبر میسازد. چندین ابزار مختلف در این زمینه وجود دارد که هر کدام در سطح جداگانهای فعالیت میکند.
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 میرسد.
در نمونه ما، بستههایی که از طریق SSH انتقال مییابند فیلتر شدهاند (با استفاده از فیلتر !tcp.port == 22
). بستهای که هم اکنون نمایش یافت در لایه HTTP قرار داشت.