ساخت ابزار Ping Sweep با کتابخانه ی Scapy در پایتون :: Mr Python | مستر پایتون

ساخت ابزار Ping Sweep با کتابخانه ی Scapy در پایتون

  • ۲۲۴۳

ساخت ابزار Ping Sweep با کتابخانه ی Scapy در پایتون

درود به همه !

 

 امروز در خدمت شما هستیم با آموزش ساخت یه ابزاری به نام ping sweep . این ابزار برای شناسایی سیستم های فعال (Live) در شبکه استفاده میشه . همانطور که احتمالا میدونید این ابزار برای اسکن سیستم های فعال در شبکه از پروتکل ICMP  استفاده میکنه . برای نوشتن این اسکریپت از کتابخونه ی   Scapy استفاده خواهیم کرد .

اگر با شبکه و تست نفوذ شبکه آشنا باشید میدونید کار پروتکل ICMP چیه . این پروتکل بیشتر برای عیب یابی در شبکه استفاده میشه . از این پروتکل برای اینکه بفهمیم یه کامپیوتر فعاله یا نه استفاده میکنیم . ابزار ping در خط فرمان هم از همین پروتکل استفاده میکنه . طرز کار به این صورته که ما ابتدا تعدادی پیغام ICMP Request میفرستیم به سیستم هدف ، سپس اگه سیستم هدف فعال باشه و پروتکل ICMP رو بلاک نکرده باشه تعدادی پیام ICMP Reply برای ما میفرسته . به همین ترتیب میتونیم بفهمیم اون سیستم فعاله یا نه .

اسکریپتی که امروز مینویسیم میاد به تمام آی پی های داخل شبکه یه سری ICMP Request میفرسته . هرکدومشون ICMP Reply فرستادن یعنی فعالن .

برای نوشتن اسکریپت در ابتدا باید کتابخونه های مورد نیاز رو نصب کنیم . یعنی SCAPY

برای نصب این کتابخونه از ابزار Pip استفاده میکنیم :

نصب Scapy در لینوکس :

MrPython@debian:~$ sudo pip3 install scapy

نصب Scapy در ویندوز :

C:\> pip install scapy

پس از نصب کتابخونه میریم سراغ سورس کد .

 

سورس کد :

from scapy.all import IP , ICMP , sr1

network_id = "192.168.1."

start_host = 1
end_host = 254

ping_timeout = 2 # Second

for host in range(start_host , end_host+1):
    ip = network_id + str(host)
    packet = IP(dst = ip) / ICMP()
    response = sr1(packet, timeout = ping_timeout , verbose = 0)

    if response:
        if response[ICMP].type == 0: # 0 is Echo Reply
            print("{} is live".format(ip))

توضیح سورس کد : در ابتدا ماژول های مورد نیاز  رو وارد کردیم . سپس یه متغییر تعریف کردیم به اسم network_id  که درواقع نتوورک آی دی یا همون قسمت ثابت آی پی های شبکه رو میریزیم داخلش (با توجه به سابنت ماسک شبکه) . پس از اون  اومدیم توسط دو متغییر start_host  و end_host رنج شبکه رو مشخص کردیم . بعد داخل متغییر ping_timeout اومدیم مقدار زمانی که باید برای ارسال جواب هر درخواست ICMP صبر کنه رو مشخص کردیم .سپس یه حلقه ی for اجرا کردیم که در هربار اجرای حلقه اومدیم کارهای زیر رو انجام دادیم :

۱ - ساختن IP (باتوجه به رنج)

۲ - ساختن پکت ّICMP

۳ - ارسال پکت توسط تابع sr1 و ریختن جوابی که هدف ارسال میکنه داخل متغییر response . اولین پارامتر این تابع پکتی هست که میخوایم ارسال کنیم و منتظر جواب برگشتی براش بمونیم و دومیش برابر timeout هستش که در بالا مقدارشو تعریف کردیم و بعدی هم که verbose هستش که وقتی برابر صفر قرارش دادیم یعنی توضیحات اضافه برای ما ننویسه .

۴ - چک کردن اینکه آیا جوابی برگشته یا نه . اگه جوابی برگشته بود چک کردیم آیا نوع بسته ی ICMP برابر صفر هست یا نه . اگه برابر صفر باشه یعنی یک پکت ICMP Reply هستش پس یعنی اون سیستم فعاله و در خط بعد آی پی اون سیستم رو چاپ میکنیم .

 

این اسکریپت رو باید با دسترسی بالا اجرا کرد . بنابراین من با استفاده از دستور  sudo روی لینوکسم این اسکریپت رو اجرا میکنم و حاصل اسکریپت رو در تصویر زیر میبینید :

 

یا حق!

Telegram Channel : @mrpythonblog

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی