كيفية انشاء Network Scanner باستخدام scapy بلغة بايثون

يعد Network Scannerعنصرًا مهمًا لمسؤول الشبكة بالإضافة إلى اختبار الاختراق. يسمح للمستخدم بتعيين الشبكة للعثور على الأجهزة المتصلة بنفس الشبكة.


في هذا البرنامج التعليمي ، ستتعلم كيفية إنشاء Network Scanner بسيط باستخدام مكتبة Scapy في Python.

سأفترض أنك قمت بالفعل بتثبيته ، إذا لم يكن الأمر كذلك ، فيرجي الرجوع الي هذه المصادر : 

 الموقع الرسمي الخاص ب Scapy .

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

أولاً ، سنحتاج إلى استيراد 
methods الأساسية من scapy :

 from scapy.all import ARP, Ether, srp 


ثانيًا ، سنحتاج إلى تقديم طلب ARP كما هو موضح في الصورة التالية:

سيرسل network scanner طلب ARP الذي يشير إلى من لديه عنوان IP محدد ، دعنا نقول "192.168.1.1" ، سيستجيب مالك عنوان IP هذا (الهدف) تلقائيًا قائلاً إنه "192.168.1.1" ، بهذه الاستجابة ، سيتم أيضًا تضمين عنوان MAC في الحزمة ، وهذا يسمح لنا باسترداد عناوين IP و MAC لجميع مستخدمي الشبكة بنجاح في وقت واحد عندما نرسل broadcast packet (إرسال packet إلى جميع الأجهزة في الشبكة).

تظهر استجابة ARP في الشكل التالي:



لذلك ، دعونا نصنع هذه الحزم:


# قم بادخال IP Address for the destination
target_ip = input(str("please enter target ip : " ))
# انشاء ARP packet
arp = ARP(pdst=target_ip)
# انشاء Ether broadcast packet
# ff:ff:ff:ff:ff:ff MAC address indicates broadcasting
ether = Ether(dst="ff:ff:ff:ff:ff:ff")
# stack them
packet = ether/arp


الآن قمنا بإنشاء هذه الحزم ، نحتاج إلى إرسالها باستخدام ()srp الدالة function التي ترسل وتستقبل الحزم في الطبقة 2 ، وقمنا بتعيين المهلة timeout على 3 حتى لا يتعطل البرنامج النصي:


 result = srp(packet, timeout=3)[0] 



result
 الآن هي قائمة ذات التنسيق (sent_packet, received_packet) ، دعنا نكررها باستخدام for loop:



# قائمة باسم cliensts سيتم ملئها في for loop
clients = []

for sent, received in result:
    # ادخال ip و mac في clients
    clients.append({'ip': received.psrc, 'mac': received.hwsrc})
  

الآن كل ما علينا فعله هو طباعة هذه القائمة 

# طباعة clients
print("All devices available in the network")
print("IP" + " "*18+"MAC")
# loop من أجل طباعتهم مع ترتيبهم
for client in clients:
print("{:16} {}".format(client['ip'], client['mac']))

الكود كامل علي github علي هذا الرابط اضغط : 

https://github.com/my-elliot/simple-network-scanner



إرسال تعليق

أحدث أقدم

نموذج الاتصال