قالب وردپرس پوسته وردپرس قالب فروشگاهی وردپس

شنود با پایتون در یک خط (Scapy)

با استفاده از Scapy میتوانید پکت های شبکه را شنود کنید، پکت ارسال کنید، پکتی را کالبد شکافی کنید و حتی یک پکت جعلی ارسال کنید. از Scapy با اهداف گوناگونی استفاده میشود. برای مثال میتوان از آن برای اسکن شبکه یا برای حملات تحت شبکه استفاده کرد.

نصب Scapy

ابتدا باید اقدام به نصب Scapy کنیم. اگر از سیستم عاملی بجز سیستم عامل لینوکس استفاده میکنید ابتدا libpcap و libdnet را باید نصب کنید. سپس از طریق pip میتوانید اقدام به نصب scapy کنید. برای مثال در ترمینال خود دستور زیر را وارد کنید :

pip install scapy

اکنون scapy را نصب کرده اید، برای اینکه از کارکرد صحیح scapy اطمینان پیدا کنید، اگر از سیستم عامل لینوکس استفاده میکنید میتوانید در ترمینال خود بنویسید :

sudo scapy

سپس باید نتیجه ای مشابه زیر برای شما نمایش داده شود.

Welcome to Scapy (2.0.1-dev)
اگر از سیستم عامل ویندوز استفاده میکنید، در CMD خود بنویسید :

scapy

سپس معمولا نتیجه ای مشابه زیر دریافت میکنید.

INFO: No IPv6 support in kernel
WARNING: No route found for IPv6 destination :: (no default route?) Welcome to Scapy (2.0.1-dev)

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

INFO: Can’t import python gnuplot wrapper . Won’t be able to plot.
INFO: Can’t import PyX. Won’t be able to use psdump() or pdfdump().
یک Packet بسازیم !

در این مثال میخواهیم یک پکت توسط scapy بسازیم، برای این منظور ابتدا یک شی به نام packet میسازیم و سپس مقصد پکت را مشخص میکنیم که در اینجا یکی از DNS سرورهای گوگل می باشد، پروتکل ارتباط را ICMP قرار میدهیم و در قسمتی که x نوشته شده است میتوانیم پیام خود را بنویسیم.

برای مثال به قطعه کد زیر توجه کنید.

from scapy.all import send, IP, ICMP
packet=sr1(IP(dst=”8.8.8.8″)/ICMP()/”XXXXXXXXXXX”)

پس از اجرای کد بالا باید نتیجه ای مشابه زیر دریافت کنیم.

Begin emission:
…Finished to send 1 packets.
.*
Received 5 packets, got 1 answers, remaining 0 packets

همچنین میتوانیم با نوشتن packet و اجرای کد محتوای پکت را ببینیم. برای مثال :

from scapy.all import send, IP, ICMP
packet=sr1(IP(dst=”8.8.8.8″)/ICMP()/”XXXXXXXXXXX”)
packet
که نتیجه ی آن محتویات پکت می باشد.

<IP version=4L ihl=5L tos=0x0 len=39 id=15489 flags= frag=0L ttl=42 proto=ICMP
chksum=0x51dd src=66.35.250.151 dst=192.168.5.21 options=” |<ICMP type=echo-reply
code=0 chksum=0xee45 id=0x0 seq=0x0 |<Raw load=’XXXXXXXXXXX’
|<Padding load=’\x00\x00\x00\x00′ |>>>>

همچنین برای نمایش بهتر پکت میتوانیم از متد show استفاده کنیم و محتویات پکت را به راحتی بخوانیم.

packet.show()

نتیجه :
—[ IP ]—
version = 4L
ihl = 5L
tos = 0x0
len = 39
id = 15489
flags =
frag = 0L
ttl = 42
proto = ICMP
chksum = 0x51dd
src = 66.35.250.151
dst = 192.168.5.21
options = ”
—[ ICMP ]—
type = echo-reply
code = 0
chksum = 0xee45
id = 0x0
seq = 0x0
—[ Raw ]—
load = ‘XXXXXXXXXXX’
—[ Padding ]—
load = ‘\x00\x00\x00\x00’
شنود در یک خط !

زبان پایتون به اعجاب های یک خطی خود معروف است، در گذشته برنامه نویسان شبکه با استفاده از سوکت پروگرمینگ میتوانستند در شبکه شنود کنند و طبیعتا این کار مشکلات فروانی داشت از جمله پارس کردن پکت ها، اما scapy با استفاده از متد sniff به راحتی و تنها در یک خط امکان شنود در شبکه را برای ما فراهم میکند. فوق العاده نیست ؟

from scapy import *
sniff(iface=”wifi0″, prn=lambda x: x.summary())

در این مثال به عنوان پارامتر iface نام اینترفیسی که میخواهیم شنود بر روی آن صورت گیرد را مینویسیم که در اینجا wifi0 میباشد ( اگر نام interface وارد نشود تمامی interface ها شنود خواهند شد) همچنین لازم به ذکر است تابع prn به ازای هرپکتی که شنود میشود فراخوانی میشود که در اینجا تابع prn هربار خلاصه ی پکت های شنودی را به ما نشان میدهد.

۸۰۲.۱۱ Management 8 ff:ff:ff:ff:ff:ff / 802.11 Beacon / Info SSID / Info Rates / Info DSset / Info TIM / Info 133
802.11 Management 4 ff:ff:ff:ff:ff:ff / 802.11 Probe Request / Info SSID / Info Rates
802.11 Management 5 00:0a:41:ee:a5:50 / 802.11 Probe Response / Info SSID / Info Rates / Info DSset / Info 133
802.11 Management 4 ff:ff:ff:ff:ff:ff / 802.11 Probe Request / Info SSID / Info Rates
802.11 Management 4 ff:ff:ff:ff:ff:ff / 802.11 Probe Request / Info SSID / Info Rates
802.11 Management 8 ff:ff:ff:ff:ff:ff / 802.11 Beacon / Info SSID / Info Rates / Info DSset / Info TIM / Info 133
802.11 Management 11 00:07:50:d6:44:3f / 802.11 Authentication
802.11 Management 11 00:0a:41:ee:a5:50 / 802.11 Authentication
802.11 Management 0 00:07:50:d6:44:3f / 802.11 Association Request / Info SSID / Info Rates / Info 133 / Info 149
802.11 Management 1 00:0a:41:ee:a5:50 / 802.11 Association Response / Info Rates / Info 133 / Info 149
802.11 Management 8 ff:ff:ff:ff:ff:ff / 802.11 Beacon / Info SSID / Info Rates / Info DSset / Info TIM / Info 133
802.11 Management 8 ff:ff:ff:ff:ff:ff / 802.11 Beacon / Info SSID / Info Rates / Info DSset / Info TIM / Info 133
802.11 / LLC / SNAP / ARP who has 172.20.70.172 says 172.20.70.171 / Padding
802.11 / LLC / SNAP / ARP is at 00:0a:b7:4b:9c:dd says 172.20.70.172 / Padding
802.11 / LLC / SNAP / IP / ICMP echo-request 0 / Raw
802.11 / LLC / SNAP / IP / ICMP echo-reply 0 / Raw
همچنین میتوانیم با استفاده از متد show محتویات پکت های شنودی را با جزییات بیشتری مشاهده کنیم.

برای مثال :‌

from scapy import *
sniff(iface=”eth1″, prn=lambda x: x.show())
که نتیجه ی زیر را به ما نشان میدهد.
—[ Ethernet ]—
dst = 00:ae:f3:52:aa:d1
src = 00:02:15:37:a2:44
type = 0x800
—[ IP ]—
version = 4L
ihl = 5L
tos = 0x0
len = 84
id = 0
flags = DF
frag = 0L
ttl = 64
proto = ICMP
chksum = 0x3831
src = 192.168.5.21
dst = 66.35.250.151
options = ”
—[ ICMP ]—
type = echo-request
code = 0
chksum = 0x89d9
id = 0xc245
seq = 0x0
—[ Raw ]—
load = ‘B\xf7i\xa9\x00\x04\x149\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\x22#$%&\'()*+,-./01234567’
—[ Ethernet ]—
dst = 00:02:15:37:a2:44
src = 00:ae:f3:52:aa:d1
type = 0x800
—[ IP ]—
version = 4L
ihl = 5L
tos = 0x0
len = 84
id = 2070
flags =
frag = 0L
ttl = 42
proto = ICMP
chksum = 0x861b
src = 66.35.250.151
dst = 192.168.5.21
options = ”
—[ ICMP ]—
type = echo-reply
code = 0
chksum = 0x91d9
id = 0xc245
seq = 0x0
—[ Raw ]—
load = ‘B\xf7i\xa9\x00\x04\x149\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\x22#$%&\'()*+,-./01234567’
—[ Padding ]—
load = ‘\n_\x00\x0b’

اگه همه کارها رو با موفقیت انجام داده باشید الان قادر خواهید بود عملیات شنود رو اجرا کنید

موفق باشید /..

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

علی سعیدی هستم مدیر گروه سکوریتی لرنینگ فعالیت در زمینه پایتون - گنو لینوکس و هک و امنیت

مطالب مرتبط

نظر بدهید

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