وبلاگ فربد | Farbod Blog

توی این وبلاگ راجع به پروژه هام صحبت می کنم

ساخت ابزار اسکن شبکه در پایتون با scapy

  • ۱۵۶۲

سلام دوستان :)

 

توی این پست قراره با هم یک اسکنر شبکه با پایتون بسازیم

کار اسکریپت ما اینه که به ما میگه چه دستگاه هایی با چه IP و MAC هایی توی شبکه ما وجود دارن. 

 

خب برای اینکار روش های زیادی موجوده اما ما می خوایم با استفاده از بسته های ARP اینکار رو انجام بدیم

همینطور که میدونید توی پایتون کتابخونه ای به نام scapy وجود داره که میتونیم به کمک اون بسته هایی رو بسازیم و دریافت کنیم.

بنابراین در این برنامه هم قراره از همین کتابخونه استفاده کنیم.

 

برای نصب این کتابخونه توی ویندوز وارد cmd شین و کد زیر رو بزنین:

pip install -U scapy

برای نصب در لینوکس هم وارد ترمینال بشین و کد زیر رو بزنین:

sudo pip3 -U install scapy

برای اینکار به کتابخونه libpcap هم نیاز داریم

برای نصب در ویندوز وارد cmd بشین و کد زیر رو بزنین:

pip install libpcap

برای لینوکس هم وارد ترمینال بشین و کد زیر رو بزنین:

sudo pip3 install -U libpcap

توجه کنید که باید npcap رو روی سیستم خودتون نصب داشته باشید

 

خب بریم سراغ کد

 

سورس:

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']))

توضیح: در خط اول از کتابخونه scapy متد های مورد نیازمون رو import کردیم. در خط بعدی متغییر targrt_ip رو تعریف کردیم که رنج IP برای اسکن رو توی این متغییر مشخص می کنیم. حالا باید یک بسته ARP بسازیم. فرص کنید که ما بسته ARP رو به سمت آی پی  192.168.1.1 می فرستیم زمانی که بسته ARP رو به سمت IP مورد نظر می فرستیم اون IP به ما جواب میده که من 192.168.1.1هستم و همچنین آدرس MAC خودش رو هم توی اون بسته قرار می ده و برای ما می فرسته. پس این بسته ARP رو می سازیم.ما برای فرستادن بسته ها در لایه دوم میتونیم از تابع srp استفاده کنیم. timeout رو هم روی 3 گذاشتیم که برنامه مون گیر نکنه.

بعد یک لیست ساختیم که کلاینت های توی شبکه رو داخلش قرار می دیم. بعد یک for نوشتیم که دونه دونه کلاینت ها رو داخل لیستمون قرار میده. در نهایت هم کلاینت ها رو چاپ می کنیم.

 

امیدوارم براتون مفید بوده باشه D:


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