0

هیچ محصولی در سبد خرید نیست.

آموزش Network Discovery

فهرست مقاله

این مقاله در مورد 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 را دانلود کرده و سپس آنرا به شکل زیر نصب کنیم:

آموزش Network Discovery 1

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

آموزش Network Discovery 2

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

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

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

آموزش Network Discovery 3

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

آموزش Network Discovery 4

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

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

آموزش Network Discovery 5

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

آموزش Network Discovery 6

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

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

آموزش Network Discovery 7

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

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

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

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

آموزش Network Discovery 8

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

آموزش Network Discovery 9

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

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

آموزش Network Discovery 10

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

آموزش Network Discovery 11

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

آموزش Network Discovery 12

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

آموزش Network Discovery 13

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

آموزش Network Discovery 14

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

آموزش Network Discovery 15 آموزش Network Discovery 16

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

آموزش Network Discovery 17

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

آموزش Network Discovery 18

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

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

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

آموزش Network Discovery 19

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

آموزش Network Discovery 20

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

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

آموزش Network Discovery 21

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

آموزش Network Discovery 22

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

آموزش Network Discovery 23

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

آموزش Network Discovery 24

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

آموزش Network Discovery 25

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

آموزش Network Discovery 26

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

آموزش Network Discovery 27

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

آموزش Network Discovery 28

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

آموزش Network Discovery 29

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

آموزش Network Discovery 30 آموزش Network Discovery 31

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

آموزش Network Discovery 32 آموزش Network Discovery 33

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

آموزش Network Discovery 34

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

آموزش Network Discovery 35

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

آموزش Network Discovery 36 آموزش Network Discovery 37

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

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

2 دیدگاه “آموزش Network Discovery”

择偶网 گفت:

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

三五笑话 گفت:

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

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

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

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

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