Scapy to niezwykle wszechstronna biblioteka Pythona, która umożliwia inżynierom sieciowym oraz specjalistom ds. bezpieczeństwa łatwe przechwytywanie, tworzenie i manipulację pakietami sieciowymi.
Dzięki obsłudze wielu protokołów sieciowych, Scapy jest idealnym narzędziem do wykonywania zadań, takich jak skanowanie portów, testowanie zabezpieczeń, analizy oraz odkrywanie sieci.
Instalacja Scapy
Aby zainstalować Scapy, wystarczy użyć menedżera pakietów pip
. W terminalu wpisz poniższą komendę:
pip install scapy
Upewnij się, że masz zainstalowanego Pythona oraz pip
.
Tworzenie pakietów w Scapy
Aby skutecznie korzystać z Scapy, należy zrozumieć strukturę pakietów sieciowych. Pakiety te składają się z różnych warstw, z których każda dostarcza specyficzne informacje potrzebne do komunikacji w sieci. Scapy upraszcza proces tworzenia tych warstw i umożliwia ich łączenie.
Warstwa Ethernet
Warstwa Ethernet to pierwsza warstwa w stosie protokołów, która zajmuje się lokalną komunikacją. Klasa Ether
w Scapy pozwala na konfigurację ramki Ethernet:
from scapy.all import Ether
# Tworzenie ramki Ethernet z określonymi adresami MAC
ethernet_frame = Ether(dst="00:1A:2B:3C:4D:5E", src="11:22:33:44:55:66", type=0x0800)
print(ethernet_frame.show())
Opcje:
dst
: Adres MAC docelowy.src
: Adres MAC źródłowy.type
: Pole EtherType.
Warstwa IP
Warstwa Internet Protocol (IP) jest odpowiedzialna za adresowanie i trasowanie pakietów przez sieci. Klasa IP
pozwala na konfigurację nagłówka IP:
from scapy.all import IP
# Konfiguracja nagłówka IP
ip_packet = IP(dst="192.0.2.1", src="10.0.0.5", ttl=128, tos=0x00, id=100, flags="DF", proto="udp")
print(ip_packet.show())
Opcje:
dst
: Adres IP docelowy.src
: Adres IP źródłowy.ttl
: Czas życia (Time-to-Live).tos
: Typ usługi (Type of Service).id
: Pole identyfikacyjne.flags
: Flagi.proto
: Protokół (np. "tcp", "udp", "icmp").
Warstwa TCP
Warstwa Transmission Control Protocol (TCP) zapewnia niezawodną komunikację. Klasa TCP
pozwala na konfigurację pól segmentu TCP:
from scapy.all import TCP
# Ustawienia dla segmentu TCP
tcp_segment = TCP(sport=54321, dport=8080, seq=2000, ack=2001, dataofs=5, reserved=0, flags="A", window=8192)
print(tcp_segment.show())
Opcje:
sport
: Port źródłowy.dport
: Port docelowy.seq
: Numer sekwencyjny.ack
: Numer potwierdzenia.flags
: Flagi kontrolne.
Warstwa UDP
Warstwa User Datagram Protocol (UDP) zapewnia lekki i bezpołączeniowy sposób komunikacji. Klasa UDP
umożliwia konfigurację pól segmentu UDP:
from scapy.all import UDP
# Ustawienia dla segmentu UDP
udp_segment = UDP(sport=1234, dport=53)
print(udp_segment.show())
Opcje:
sport
: Port źródłowy.dport
: Port docelowy.
ICMP
Pakiety Internet Control Message Protocol (ICMP) są wykorzystywane do wysyłania komunikatów o błędach i informacji operacyjnych:
from scapy.all import ICMP
# Ustawienia dla pakietu ICMP
icmp_packet = ICMP(type=0, code=0)
print(icmp_packet.show())
Opcje:
type
: Typ ICMP (np. 0 dla Echo Reply).code
: Kod ICMP.
Łączenie warstw w pakiety
Scapy umożliwia łączenie warstw w celu utworzenia pełnych pakietów. Możesz używać operatora /
do łączenia warstw:
from scapy.all import Ether, IP, TCP
# Łączenie warstw Ethernet, IP i TCP
combined_packet = Ether(dst="00:1A:2B:3C:4D:5E", src="11:22:33:44:55:66") / IP(dst="192.0.2.1", src="10.0.0.5") / TCP(dport=8080, flags="A")
print(combined_packet.show())
Wysyłanie pakietów
Po utworzeniu pakietu możesz go wysłać przez sieć za pomocą funkcji sendp
dla pakietów warstwy Ethernet oraz send
dla pakietów warstwy IP:
from scapy.all import sendp
# Wysyłanie pakietu Ethernet
sendp(combined_packet)
Przykład tworzenia i wysyłania pakietu
Oto kompletny przykład ilustrujący, jak utworzyć i wysłać niestandardowy pakiet z warstwami Ethernet, IP i TCP przy użyciu Scapy:
from scapy.all import Ether, IP, TCP, sendp
# Definiowanie ramki Ethernet
ethernet_frame = Ether(dst="00:1A:2B:3C:4D:5E", src="11:22:33:44:55:66")
# Definiowanie nagłówka IP
ip_packet = IP(dst="192.0.2.1", src="10.0.0.5", ttl=128)
# Definiowanie segmentu TCP
tcp_segment = TCP(sport=54321, dport=8080, seq=2000, ack=2001)
# Łączenie warstw w celu utworzenia pełnego pakietu
final_packet = ethernet_frame / ip_packet / tcp_segment
# Wyświetlanie szczegółów pakietu
print(final_packet.show())
# Wysyłanie pakietu
sendp(final_packet)
Zastosowania Scapy
Scapy to niezwykle elastyczne narzędzie, które znajduje zastosowanie w wielu obszarach związanych z inżynierią sieciową. Poniżej przedstawione są najważniejsze zastosowania Scapy, wraz z przykładami, które mogą być szczególnie przydatne dla inżynierów sieciowych.
Przeczytaj całą historię
Zarejestruj się teraz, aby przeczytać całą historię i uzyskać dostęp do wszystkich postów za tylko dla płacących subskrybentów.
Subskrybuj![Inna Sieć](/content/images/size/w300/2024/06/recreate-02.png)