0

سبد خرید شما خالی است.

عصر شبکه » برنامه نویسی و IT » آشنایی با کتابخانه قدرتمند Scapy

آشنایی با کتابخانه قدرتمند Scapy

آن چه در این محتوا میخوانید

این مقاله در مورد Scapy و کاربرردهای آن می باشد. یک ابزار و کتابخانه قدرتمند در Python . با این ابزار می توان بسته های مشخص را برای کلاینت ارسال کرد، یا می توان محتوای یک بسته را بررسی کرده و حتی آنرا دستکاری و بسته های جعلی را برای یک کلاینت مشخص ارسال کنیم. می توانیم با این قابلیت هایی که در ماژول Scapy وجود دارد، ابزارهای مورد نظر خود را جهت بررسی ، اسکن و حتی حمله بسازیم.

عملا با این ماژول می توانیم پکت های روی شبکه را Sniff کرده، آنرا Decode کنیم، محتوای آنرا تغییر دهیم، و دوباره آنرا در بستر شبکه ارسال کنیم. با این ماژول می توان کار بسیاری از ابزارها در یک ابزار ساخته شده خلاصه کرد.می توان حملاتی مانند Arp Poisoning ، Sniffing، Replace Download File، DNS Spoofing ، HTTP Spoofing، MITM ، Code Injection و…. را با این ابزار قدرت مند ایجاد کرد.

Scapy عمدتا برای سیستم های Unix base طراحی شده است و بهترین عملکرد را نیز در آنها دارد. اما آخرین نسخه Scapy ، از ویندوز پشتیبانی می کند. یعنی می توان از تمام ویژگی های Scapy در ویندوز نیز استفاده کرد.

برای اینکار در قدم اول باید Python را نصب کنیم. مرحله دوم نصب Npcap می باشد. همچنین Scapy با Winpcap نیز کار می کند. در نهایت نیز باید Scapy را دانلود کرده و سپس آنرا به شکل زیر نصب کنیم:

آشنایی با کتابخانه قدرتمند Scapy 1

سپس می توانیم دستور scapy را در محیط cli وارد کنیم تا وادر محیط این ابزار شویم:

آشنایی با کتابخانه قدرتمند Scapy 2

اما عمده کار استفاده در محیط لینوکس می باشد. در واقع می خواهیم از ماژول scapy در برنامه نویسی استفاده کنیم تا بتوانیم برنامه مورد نظر خود را بسازیم. سیستم عاملی هم که با آن کار می کنیم Kali Linux می باشد.

در قدم اول می خواهیم مبحث مربوط به ARP Monitoring را بررسی کنیم.

اگر این ماژول نصب نیست،با استفاده از pip آنرا نصب می کنیم:

آشنایی با کتابخانه قدرتمند Scapy 3

حال می توانیم با دستور import ، از Scapy در برنامه خود استفاده کنیم:

آشنایی با کتابخانه قدرتمند Scapy 4

در Scapy یک متدی وجود دارد به نام arping که می توان به راحتی MAC Address یک IP را به دست بیاورد.

به شکل زیر دقت کنید:

آشنایی با کتابخانه قدرتمند Scapy 5

در این کد بالا یک تابع ایجاد کردیم و برای آن یک آرگومان در نظر گرفته ایم. سپس متد arping را برای این آرگومان استفاده کردیم تا MAC Address آن را به دست بیاوریم. و در خط آخر نیز این تابع را برای آدرس مشخص شده فراخوانی کرده ایم. در خروجی این کد مقدار MAC برای ما برگردادنده می شود:

آشنایی با کتابخانه قدرتمند Scapy 6

به همین راحتی می تواند MAC Address هدف را به دست بیاورد.

همچنین می توان با قرار دادن رنج آدرس ، مقدار MAC موجود در یک Broadcast Domain را به دست آورد.

آشنایی با کتابخانه قدرتمند Scapy 7

نکته : از آنجایی که ARP یک مکانیزم لایه 2 محسوب می شود، پس تنها می توان از آن برای سیستم های موجود در یک Broadcast Domain استفاده کرد.

خوب ، با این کار توانستیم کلاینت های موجود در شبکه به همراه IP و MAC آنها را شناسایی کنیم.

حال می خواهیم برنامه را حرفه ای تر کنیم. در قدم اول می بایست یک پکت ARP Request بسازیم و تا بتوانیم آنرا در شبکه Broadcast کنیم.

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

آشنایی با کتابخانه قدرتمند Scapy 8

مشاهده می کنید که در خروجی مقدار  آدرس مقصد را برابر با 0.0.0.0 قرار داده شده است. دلیل آن این است که باید برای متد ARP() ، فیلد هایی را مشخص و تعریف کنیم. اما چه فیلد هایی را باید مشخص کنیم و اصلا این فیلدها چه مقادیری هستند؟ برای توضیح بیشتر به شکل زیر دقت کنید:

آشنایی با کتابخانه قدرتمند Scapy 9

ماژول Scapy یک متد به نام ls دارد، که می تواند لیستی از فیلد های قابل اجرا در یک متد را مشخص کند.

در شکل بالا مقادیری که می توانیم به متد ARP اضافه کنیم، به همراه مقادیر پیشفرض آن نمایش داده شده است. اولین مقداری که به آن نیاز داریم ، pdst می باشد که با آن می توانیم آدرس مقصد را مشخص کنیم. این مقدار را باید برابر با آرگومان تابع scan قرار دهیم.

آشنایی با کتابخانه قدرتمند Scapy 10

حال اگر کد خود را اجرا کنیم می بینید که سوال را دقیقا از آدرس مشخص شده می پرسد که در اینجا همان رنج کی باشد:

آشنایی با کتابخانه قدرتمند Scapy 11

قدم بعدی ، مشخص کردن MAC Address مقصد می باشد. چون تمامی سیستم های شبکه را بررسی کنیم، باید مقدار Broadcast را مشخص کنیم. برای این موضوع نیز از ماژول Scapy و متد Ether استفاده می کنیم:

آشنایی با کتابخانه قدرتمند Scapy 12

در شکل بالا ، مقادیری که می توانیم برای این متد مشخص کنیم را می توانید مشاهده کنید. همانطور که از توضیحات آن نیز مشخص است، فیلدی که به آن احتیاج داریم dst می باشد. پس مانند ARP ، اینجا نیز از یک متغیر برای مشخص کردن آن استفاده می کنیم:

آشنایی با کتابخانه قدرتمند Scapy 13

با اجرای کد پکت ارسالی به مقصد Broadcast برای همه کلاینت های موجود در شبکه ارسال می شود. مقدار Source Mac نیز همانطور که در خروجی می بینید ، برابر با آدرس Kali Linux می باشد:

آشنایی با کتابخانه قدرتمند Scapy 14

تا اینجا یک متغیر برای ارسال پکت ARP برای IP مورد نظر، و یک متغیر برای Broadcast MAC ایجاد کردیم. می بایست این دو متغیر را در یک متغیر ترکیب کنیم و برای بررسی مقدار summary آنرا نمایش دهیم:

آشنایی با کتابخانه قدرتمند Scapy 15

آشنایی با کتابخانه قدرتمند Scapy 16

برای اینکه بتوانیم محتویات بیشتری ازپکت را مشاهده کنیم، می توانیم از متد show() برای متغیر خود استفاده کنیم که اطلاعات بیشتری را در اختیار ما می گذارد:

آشنایی با کتابخانه قدرتمند Scapy 17

خروجی متد بالا شکل زیر خواهد بود:

آشنایی با کتابخانه قدرتمند Scapy 18

مشاهد می کنید که در هر پارت پارامترها مشخص شده اند.

نکته : از متد show() می توان برای متغیرهای قبلی نیز استفاده کرد.

تا اینجای کار توانستیم که پکت ARP خود را ایجاد کنیم. در قدم بعدی باید این پکت را ارسال کنیم. در Scapy برای ارسال پکت از متد sr () استفاده می شود. اما در اینجا چون مقادیر Ether و ARP را تغییر داده ایم، از متد srp() استفاده می کنیم. با اینکار پکتی را که مشخص کرده ایم را ارسال و Response آنرا دریافت می کند. :

آشنایی با کتابخانه قدرتمند Scapy 19

در مثال بالا پکت ارسال می شود، اما مقدار برگشتی بیشتر از یک مقدار خواهد بود. یک بخش مربوط می شود که سیستم هایی که جواب این پکت را می دهند ، قسمت دیگر مربوط می شود که آدرس هایی که بر روی سیستمی وجود ندارند تا جواب بدهند. برای انکار می توانیم دو متغیر (Answered و Unanswered) ایجاد کرده و مقدار برگشتی را در درون آنها قرار دهیم.

آشنایی با کتابخانه قدرتمند Scapy 20

حال می توانیم مقدار پکت های answered را نمایش دهیم. اما خواهید دید که این کد زمان نسبتا زیادی را خواهد گرفت تا جواب ها را نمایش دهد. دلیل آن هم زمانی می باشد که صرف سوال از همه آدرس ها می کند.

برای حل این مشکل می توان از فیلد timeout برای متد srp استفاده کنیم و مقدار آنرا برابر با 1 قرار دهیم. در این صورت در صورتی که جوابی از کلاینت در 1 ثانیه دریافت نکند ، از آن IP می گذرد و به سراغ آدرس بعدی می رود.

آشنایی با کتابخانه قدرتمند Scapy 21

در خروجی آدرس هایی که به این درخواست جواب داده اند نمایش داده می شوند:

آشنایی با کتابخانه قدرتمند Scapy 22

خروجی این بالا از نوع لیست می باشد. اندیس 0 برای answered و اندیس 1 برای unanswered . پس می توانیم در انتهای کد مقدار اندیسی که می خواهیم را مشخص کنیم. و چون با مقادیر unanswered نیز کاری نداریم ، آنرا حذف می کنیم:

آشنایی با کتابخانه قدرتمند Scapy 23

حال می توانیم با یک حلقه for به المنت های موجود در خروجی به شکل زیر دستیابی داشته باشیم:

آشنایی با کتابخانه قدرتمند Scapy 24

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

آشنایی با کتابخانه قدرتمند Scapy 25

مشاهده می کنید که دیتای بیشتری را نسبت به استفاده از متد summary() می توان دریافت کرد. زیرا با اینکار تمام دیتا موجود پکت را نمایش داده ایم. می توانیم برای جدا کردن elementها از تعدادی – استفاده کنیم:

آشنایی با کتابخانه قدرتمند Scapy 26

اگر به خروجی دقت کنیم، می بینیم که هر element از دو بخش تشکیل شده است. قسمت اول مربوط می شود که پکتی که ارسال کرده ایم، و قسمت دوم جوابی است که از کلاینت دریافت کرده ایم. در بخش اول element نیز دو قسمت وجود دارد که قسمت اول یعنی MAC برابر با آدرس Broadcast می باشد و قسمت دوم مربوط به آدرسی است که از آن سوال می پرسیم.

آشنایی با کتابخانه قدرتمند Scapy 27

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

آشنایی با کتابخانه قدرتمند Scapy 28

خروجی دستور بالا می شود:

آشنایی با کتابخانه قدرتمند Scapy 29

چون کل دیتا را نمایش می دهد برای ما قابل خواندن نیست. پس از متد show() استفاده می کنیم:

آشنایی با کتابخانه قدرتمند Scapy 30

آشنایی با کتابخانه قدرتمند Scapy 31

مشاهده می کنید که تمام فیلد های موجود در پکت Response را نمایش می دهد. حال می توانیم با مشخص کردن فیلد های psrc و hwsrc که همان Source IP و Source MAC می باشد، خروجی تصحیح کنیم. دقت کنید چون فقط Response Packet را فیلتر کردیم، از فیلد های Source برای مشخصات کلاینت ها استفاده می کنیم.

آشنایی با کتابخانه قدرتمند Scapy 32

آشنایی با کتابخانه قدرتمند Scapy 33

برای داشتن خروجی بهتر ، می توان متنی که در قسمت اول خروجی چاپ می شود را نیز حذف کرد. برای اینکار باید خصوصیت verbose را False کنیم:

آشنایی با کتابخانه قدرتمند Scapy 34

خروجی به شکل زیر خواهد بود:

آشنایی با کتابخانه قدرتمند Scapy 35

و در نهایت برای نمایش بهتر خروجی ، می توانیم به شکل زیر عمل کنیم:

آشنایی با کتابخانه قدرتمند Scapy 36

آشنایی با کتابخانه قدرتمند Scapy 37

در ادامه موضوع ARP Poisoning را بررسی خواهیم کرد.

فرستادن دیدگاه

2 دیدگاه “آشنایی با کتابخانه قدرتمند Scapy”

择偶网 گفت:

人生不如意十之八九,开心最重要!

三五笑话 گفت:

不知道说啥,开心快乐每一天吧!

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

مشاوره رایگان عصر شبکه

برای تماس فرم زیر را تکمیل کنید