-
پنجشنبه, ۹ ارديبهشت ۱۴۰۰، ۰۷:۰۵ ب.ظ
-
۱۶۹۱
سلام دوستان :)
توی این پست قراره با هم یک اسکنر شبکه با پایتون بسازیم
کار اسکریپت ما اینه که به ما میگه چه دستگاه هایی با چه 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: