Scapy mini cheat sheet
oraz prosty skrypt wykorzystujący scapy, a wykonujący skanowanie wybranego portu posługując się adresem IP multicast.
Dokument jest jednym z materiałów przekazywanych uczestnikom szkolenia: bezpieczeństwo sieci.
Podstawowe tworzenie pakietów i odczytywanie odpowiedzi
|
ls() |
Listowanie obsługiwanych przez scapy pakietów |
|
lsc() |
Listowanie funkcji scapy |
|
ls(ICMP) |
Wyświetlanie struktury pakietu |
|
pakiet = IP()/ICMP() |
Tworzenie nowego pakietu |
|
pakiet =IP(dst=’192.168.1.100’,ttl=10)/ICMP() |
Tworzenie pakietu z ustalaniem wartości |
|
pakiet.show() |
Wyświetlanie szczegółów pakietu |
|
odpowiedz = sr1(pakiet) |
Wysyłanie pakietu i odczytywanie pierwszej odpowiedzi (bez konieczności uzupełnienia pakietu o ramkę Ethernet) |
|
odp = srp1(Ether()/IP(dst=’192.168.1.100’)/ICMP()) |
Wysyłanie pakietu i odczytywanie pierwszej odpowiedzi (z podaniem ramki Ethernet) |
|
pakiet = IP()/TCP() pakiet[IP].dst = ‘192.168.1.100’ pakiet[TCP].dport = 80 |
Modyfikacja zawartości stworzonego pakietu |
Operacje na grupach pakietów
|
p = IP(dst=’192.168.1.1’)/TCP(dport=(10,30)) |
Stworzenie 20 pakietów TCP |
|
p = IP(dst=’192.168.1.1’)/TCP(dport=[10,30]) |
Stworzenie 2 pakietów TCP |
|
answered, uanswered = sr(p,timeout=10) |
Wysłanie grupy pakietów |
|
answered.show() |
Podsumowanie wysłanej /odebranej komunikacji |
|
pakiet = answered[3][1] |
Podstawienie do zmiennej o nazwie pakiet trzeciej z kolei odpowiedzi |
Inne operacje na pakietach
|
res =
sniff(filter=’TCP’) |
Podsłuchanie komunikacji sieciowej docierającej do stacji
nasłuchującej z zastosowaniem filtru BPF. |
|
p =
fuzz(IP()) |
Wykonanie podstawowego fuzzingu |
|
wrpcap(‘pakiety.pcap’,pakiety) |
Zapisanie pakietów w pliku pcacp |
|
res = rdpcap(‘pakiety.pcap’) |
Odczytanie pakietów z pliku pcap |
|
p = IP(ttl=10)/IP(ttl=2) p[0].ttl |
Dostęp do warstw o tej samej nazwie |
Inne przydatne możliwości scapy
|
dir() |
Wyświetlenie zadeklarowanych zmiennych |
|
<Strzałka w górę> |
Dostęp do historii poleceń |
|
<Tabulator> |
Dokańczanie nazw zmiennych / pakietów |
|
<CTRL+C> |
Zakończenie nasłuchiwania (np. przy funkcjach sniff(), sr() |
|
help(funkcja) |
Wyświetlenie pomocy |
|
ICMP.type.i2s |
Wyświetlenie możliwych wartości przyjmowanych przez dane pole (mapowanie cyfry – znaczenie słowne; dla pól typu enum) |
|
conf.noenum.add(TCP.sport) p=TCP() |
Wyłączenie zamiany numerów portów na nazwy |
# scan.py
# skanowanie wybranego portu – adres źródłowy jest adresem
# multicastowym – wybieranym w pierwszej pętli
from scapy.all import *
for i in range(1,15):
addr = "224.0.0."+str(i)
print addr
p = IP(src=addr,dst='192.168.2.1')/TCP(sport=19952,dport=80,flags="S")
try:
r = sr1(p,timeout=4,verbose=0)
print "addr:" + addr
print r.sprintf("flags: %TCP.flags%")
except:
print "timeout"
