في هذا المقال سأقوم بشرح مثال جديد على قوة أداة Scapy وذلك من خلال توضيح كيفية تنفيذ ARP Discovery. بالطبع نحنُ نعلم أن أن الـARP هو بروتوكول يعمل في الطبقة الثانية، لن أشرح وظيفته فهذا خارج نطاق هذا المقال.

لمن لا يعرف ما هي أداة Scapy، بشكل مبسط هي أداة قوية جدًا تستخدم في العديد من الأمور منها التقاط وتحليل و التلاعب أو حتى إنشاء الـTraffic الخاصة بالشبكة. بالرغم من أنها يمكن استخدامها بشكل منفصل إلا أنها تعتبر أيضًا مكتبة يمكن الاستفادة منها في بايثون.

سأقوم بتنفيذ هذه العملية بين نظامين، أحدهم كالي والأخر ويندوز:

vm_scapy

دعنا أولاً نرى مما تتكون حزمة الـARP:

arp_scapy

كما يتضح لنا من الصورة السابقة تم تحديد الـMAC والـIP بشكل آلي بحيث تم إعطائهم القيمة الخاصة بالمصدر الذي أعمل عليه وهو في هذه الحالة نظام كالي والذي يملك الـIP والـMAC الموضحين في الصورة السابقة.

بما أننا نعلم الآن تكوين حزمة الـARP، دعنا ننفذ العملية الآن:

سأقوم بإنشاء متغير جديد وأضع قيمته وهي حزمة من نوع ARP، وبعدها سأحدد عنوان الـIP المستهدف من خلال تغيير المتغير الداخلي لحزمة الـARP المسمى بـpdst إلى العنوان الذي أريد إيصال الحزمة إليه وبعدها سأعرض محتويات الحزمة.

arp_scapy2

 

كما تلاحظون في الصورة السابقة لقد تغير عنوان الـIP الخاص بالمصدر بالإضافة إلى عنوان الـMAC أيضًا، لماذا!! ذلك لأنني أقوم بتشغيل كرتين شبكة على نظام كالي، الكارت الأول يعمل على النطاق 192.168.1.1 والكارت الثاني يعمل على النطاق 192.168.56.1 ولأنني قمت باستهداف عنوان IP يعمل على النطاق الثاني فتم استخدام الكارت الثاني كمصدر للحزمة.

حتى الآن كل ما قمنا به هو تكوين الحزمة الخاصة بنا المراد إرسالها للهدف، سأقوم الآن باستخدام دالة sr1 وذلك لإرسال الطلب واستقبال أول استجابة من الهدف.

arp_scapy3

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

arp_scapy4

حسنٌ، ماذا في رأيك سيحدث لو قمنا بإرسال الحزمة إلى هدف ليس موجود على النطاق الخاص بنا؟ دعنا نرى ماذا سيحدث!! سأقوم بإنشاء حزم وإرسالها إلى هدف ليس موجود، دعنا نرى ما سيحدث عندما نفعل ذلك!!

arp_scapy5

هذه هي النتيجة، الانتظار إلى الأبد 🙁 لحل هذه المشكلة، أما أن نقوم بإيقاف العملية بشكل يدوي كما فعلت في الصورة السابقة وذلك باستخدام الطريقة المعتادة وهي CTRL + C أو يمكننا تحديد مدة معينة لانتظار الاستجابة وذلك باستخدام دالة timeout كما هو موضح في المثال التالي:

arp_scapy6

كما نرى في الصورة السابقة، فقد تم إيقاف الانتظار بعد ثانيتين وكما نرى فقد تم إرسال 5 حزم ولم يتم استقبال أي استجابات وذلك لأننا نقوم بإرسال الحزم لهدف ليس موجود. يجب عليك وبشدة عندما تستخدم أداة Scapy من خلال بايثون أن تستخدم دالة timeout لأنها ستوفر عليك الكثير من الانتظار.

يمكننا أيضًا حفظ نتيجة الطلب الخاص بنا في متغير نقوم بمعاينة محتواه كما نريد وذلك من خلال الأمر التالي:

arp_scapy7

 

الختام: في هذا المقال قمنا باستخدام Scapy لتنفيذ ARP Discovery وذلك للتحقق من إن كان هدفنا يعمل حقًا أم لا.

بهذا ينتهي مقالنا لهذا اليوم، وإن شاء الله في دروس قادمة سأقوم بشرح استخدامات أكثر لـScapy مع إضافة بعض أمثلة استخدامه كـ مكتبة بايثون.