image/svg+xml
FREE PALESTINE
كيفية إنشاء ماسح ضوئي للشبكة باستخدام مكتبة Scapy في Python

كيفية إنشاء ماسح ضوئي للشبكة باستخدام مكتبة Scapy في Python

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

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

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

from scapy.all import ARP, Ether, srpCode language: JavaScript (javascript)

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

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

استجابة ARP موضحة في الشكل التالي:

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

target_ip = "192.168.1.1/24"
#IP Address for the destination
#create ARP packet
arp = ARP(pdst=target_ip)
#create the 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/arpCode language: PHP (php)

ملحوظة: إذا لم تكن على دراية بالرمز “/ 24” أو “/ 16” بعد عنوان IP ، فهو في الأساس نطاق IP هنا ، على سبيل المثال “192.168.1.1/24” هو نطاق من “192.168.1.0 “إلى” 192.168.1.255 “، يرجى قراءة المزيد حول CIDR Notation.

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

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

النتيجة الآن قائمة أزواج بتنسيق (sent_packet ، Received_packet) ، دعنا نكررها:

# a list of clients, we will fill this in the upcoming loop
clients = []
for sent, received in result:
    # for each response, append ip and mac address to `clients` list
    clients.append({'ip': received.psrc, 'mac': received.hwsrc})Code language: PHP (php)

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

# print clients
print("Available devices in the network:")
print("IP" + " "*18+"MAC")
for client in clients:
    print("{:16}    {}".format(client['ip'], client['mac']))Code language: PHP (php)

الكود كامل

from scapy.all import ARP, Ether, srp
target_ip = "192.168.1.1/24"
# IP Address for the destination
# create ARP packet
arp = ARP(pdst=target_ip)
# create the 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
result = srp(packet, timeout=3, verbose=0)[0]
# a list of clients, we will fill this in the upcoming loop
clients = []
for sent, received in result:
    # for each response, append ip and mac address to `clients` list
    clients.append({'ip': received.psrc, 'mac': received.hwsrc})
# print clients
print("Available devices in the network:")
print("IP" + " "*18+"MAC")
for client in clients:
    print("{:16}    {}".format(client['ip'], client['mac']))Code language: PHP (php)

فيما يلي لقطة شاشة لنتائجي في شبكتي:

الكتاب الذين اعجبو بهذا المقال

مقالات مشابهة