Product SiteDocumentation Site

10.8. أدوات تشخيص الشبكات

عندما لا يعمل التطبيق الشبكي كما يجب، فمن المهم أن يتمكن المرء من فحص ما يجري عن قرب. وحتى عندما يبدو أن كل شيء على ما يرام، قد يساعد تشخيص الشبكة على التأكد أن كل شيء يعمل كما يجب. هناك العديد من أدوات التشخيص المخصصة لهذا الغرض؛ وكل منها يعمل على مستوى مختلف.

10.8.1. التشخيص المحلي: netstat

لنتحدث أولاً عن الأمر netstat (من حزمة net-tools)؛ يعرض هذا الأمر ملخصًا آنياً عن نشاط الشبكة في الجهاز. عند استدعاء هذا الأمر بدون متغيرات، سوف يعرض جميع الاتصالات المفتوحة؛ قد تكون هذه القائمة طويلة جداً لأنها تحوي العديد من مقابس نطاق يونكس – Unix-domain sockets (التي تستخدمها خدمات النظام بشكل واسع) والتي لا علاقة لها بالشبكة مطلقًا (مثل اتصالات 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:22              0.0.0.0:*               LISTEN      2224/sshd       
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      994/exim4       
tcp        0      0 192.168.1.241:22        192.168.1.128:47372     ESTABLISHED 2944/sshd: roland [
tcp        0      0 192.168.1.241:22        192.168.1.128:32970     ESTABLISHED 2232/sshd: roland [
tcp6       0      0 :::22                   :::*                    LISTEN      2224/sshd       
tcp6       0      0 ::1:25                  :::*                    LISTEN      994/exim4       
udp        0      0 0.0.0.0:68              0.0.0.0:*                           633/dhclient    
udp        0      0 192.168.1.241:123       0.0.0.0:*                           764/ntpd        
udp        0      0 127.0.0.1:123           0.0.0.0:*                           764/ntpd        
udp        0      0 0.0.0.0:123             0.0.0.0:*                           764/ntpd        
udp6       0      0 fe80::a00:27ff:fe6c:123 :::*                                764/ntpd        
udp6       0      0 2002:52e0:87e4:0:a0:123 :::*                                764/ntpd        
udp6       0      0 ::1:123                 :::*                                764/ntpd        
udp6       0      0 :::123                  :::*                                764/ntpd        
كما هو متوقع، يسرد هذا الأمر الاتصالات المفتوحة، وهما اتصالا SSH في هذا المثال، والتطبيقات التي تنتظر الاتصالات الواردة (ذات الحالة LISTEN)، أهمها مخدم البريد الإلكتروني Exim4 الذي ينصت على المنفذ 25.

10.8.2. التشخيص عن بعد: nmap

إن nmap (المتوفر في الحزمة ذات الاسم نفسه) هو –بشكل أو بآخر– مكافئ لـ netstat ولكن يعمل عن بعد. يستطيع nmap فحص مجموعة من المنافذ ”المعروفة“ لمخدم بعيد واحد أو لمجموعة من المخدمات، وسرد المنافذ التي يجد تطبيقاً يجيب على الاتصالات الواردة إليها. بالإضافة لذلك، يستطيع nmap التعرف على بعض هذه التطبيقات، بل يتعرف أحياناً على أرقام إصدارها. الجانب السلبي لهذه الأداة هو أنها لا تستطيع تقديم معلومات عن العمليات أو المستخدمين، لأنها تعمل عن بعد بطبيعة الحال؛ لكنها تستطيع العمل على عدة أهداف في الوقت ذاته.
في الحالة النموذجية لا يستخدم إلا الخيار -A عند استدعاء nmap (حتى يحاول nmap التعرف على إصدارات برمجيات المخدم التي يعثر عليها) يليه عنوان IP واحد أو أكثر أو أسماء DNS للأجهزة المراد فحصها. هنا أيضًا توجد الكثير من الخيارات الأخرى للتحكم بسلوك nmap؛ ولمعرفتها يمكنك الرجوع إلى التوثيق المتاح في صفحة التعليمات nmap(1)‎.
# nmap mirwiz

nmap 192.168.1.30

Starting Nmap 6.00 ( http://nmap.org ) at 2013-11-13 11:00 CET
Nmap scan report for mirwiz (192.168.1.30)
Host is up (0.000015s latency).
Not shown: 997 closed ports
PORT      STATE SERVICE
22/tcp    open  ssh
111/tcp   open  rpcbind
10000/tcp open  snet-sensor-mgmt

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

Starting Nmap 6.00 ( http://nmap.org ) at 2013-11-13 10:54 CET
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000084s latency).
Other addresses for localhost (not scanned): 127.0.0.1
Not shown: 996 closed ports
PORT      STATE SERVICE VERSION
22/tcp    open  ssh     OpenSSH 6.0p1 Debian 4 (protocol 2.0)
| ssh-hostkey: 1024 ea:47:e5:04:a0:b8:70:29:c2:94:3d:fe:a8:b8:b4:02 (DSA)
|_2048 81:5c:a4:56:ff:c0:bf:0d:cd:e6:cc:48:2f:15:78:ea (RSA)
25/tcp    open  smtp    Exim smtpd 4.80
| smtp-commands: mirwiz.internal.placard.fr.eu.org 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
| rpcinfo: 
|   program version   port/proto  service
|   100000  2,3,4        111/tcp  rpcbind
|   100000  2,3,4        111/udp  rpcbind
|   100024  1          40114/tcp  status
|_  100024  1          55628/udp  status
10000/tcp open  http    MiniServ 1.660 (Webmin httpd)
| ndmp-version: 
|_  ERROR: Failed to get host information from server
|_http-methods: No Allow or Public header in OPTIONS response (status code 200)
|_http-title: Site doesn't have a title (text/html; Charset=iso-8859-1).
No exact OS matches for host (If you know what OS is running on it, see http://nmap.org/submit/ ).
TCP/IP fingerprint:
OS:SCAN(V=6.00%E=4%D=11/13%OT=22%CT=1%CU=40107%PV=N%DS=0%DC=L%G=Y%TM=52834C
OS:9E%P=x86_64-unknown-linux-gnu)SEQ(SP=102%GCD=1%ISR=105%TI=Z%CI=Z%II=I%TS
OS:=8)OPS(O1=M400CST11NW5%O2=M400CST11NW5%O3=M400CNNT11NW5%O4=M400CST11NW5%
OS:O5=M400CST11NW5%O6=M400CST11)WIN(W1=8000%W2=8000%W3=8000%W4=8000%W5=8000
OS:%W6=8000)ECN(R=Y%DF=Y%T=41%W=8018%O=M400CNNSNW5%CC=Y%Q=)T1(R=Y%DF=Y%T=41
OS:%S=O%A=S+%F=AS%RD=0%Q=)T2(R=N)T3(R=N)T4(R=Y%DF=Y%T=41%W=0%S=A%A=Z%F=R%O=
OS:%RD=0%Q=)T5(R=Y%DF=Y%T=41%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)T6(R=Y%DF=Y%T=41%
OS:W=0%S=A%A=Z%F=R%O=%RD=0%Q=)T7(R=Y%DF=Y%T=41%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=
OS:)U1(R=Y%DF=N%T=41%IPL=164%UN=0%RIPL=G%RID=G%RIPCK=G%RUCK=G%RUD=G)IE(R=Y%
OS:DFI=N%T=41%CD=S)

Network Distance: 0 hops
Service Info: Host: mirwiz.internal.placard.fr.eu.org; OS: Linux; CPE: cpe:/o: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 48.20 seconds
كما هو متوقع، التطبيقان SSH و Exim4 مذكوران. لاحظ أنه لا تنصت جميع التطبيقات إلى جميع عناوين IP؛ فبما أن الوصول إلى Exim4 ممكن عبر الواجهة المحلية lo فقط، نراه يظهر فقط أثناء تحليل localhost ولا نراه عند فحص mirwiz (الذي يشير إلى الواجهة eth0 على الجهاز نفسه).

10.8.3. برامج التقاط الرزم (Sniffers): ‏tcpdump وwireshark

أحياناً، يحتاج المرء للاطلاع على ما يجري في الكابلات، رزمة رزمة. هذه الحالات تحتاج ”محلل إطارات – frame analyzer“، أو ما يعرف أكثر باسم sniffer. تراقب هذه الأدوات كافة الرزم التي تصل إلى واجهة شبكية معينة، وتعرضها بأسلوب قريب للمستخدم.
الأداة الرائدة في هذا المجال هي tcpdump بلا منازع، وهي متوفرة في العديد من المنصات كأداة قياسية. تسمح هذه الأداة بأنماط عديدة لالتقاط رزم الشبكة، لكن تمثيل هذه الرزم يبقى غامضاً نوعاً ما. لذلك لن نُفصِّل في شرحها أكثر من ذلك هنا.
wireshark (في الحزمة wireshark) هو برنامج أحدث (وأكثر تطوراً)، وهو يسعى ببطء ليصبح الأداة المرجعية الجديدة في مجال تحليل نشاط الشبكات وذلك نتيجة تعدد وحدات فك الترميز التي تسمح له بتقديم تحليل مبسط للرزم الملتقطة. تعرض الرزم رسومياً وتنظم حسب طبقات البروتوكول. هذا يسمح للمستخدم برؤية جميع بروتوكولات الرزمة. مثلاً، إحدى الرزم تحوي طلب HTTP، سوف يعرض wireshark المعلومات المتعلقة بالطبقة الفيزيائية، وطبقة إيثرنت، ومعلومات IP الخاصة بالرزمة، ومتغيرات اتصالات TCP، وأخيراً طلب HTTP نفسه، وذلك بصورة منفصلة؛ كل على حدة.
محلل رزم الشبكة wireshark

شكل 10.1. محلل رزم الشبكة wireshark

في مثالنا، لا تظهر الرزم المرسلة عبر SSH (بسبب الفلتر !tcp.port == 22). أما الرزمة المحددة في الصورة فقد تطورت في طبقة HTTP.