You are on page 1of 19

Scapy

pakiety sieciowe na pythonowym warsztacie


Konrad Gawda, PyWaw#4 12.09.2011

Scapy - prezentacja
teoria
Co to jest pakiet... Co to jest Scapy? Co Scapy robi z pakietami?

praktyka
Pakiety Wysyanie Odbieranie Sniffing Dla wzrokowcw Jako biblioteka

Pakiet, sie...

(krtkie przypomnienie)

Co to jest Scapy?
"Scapy is a powerful interactive packet manipulation program." Nie ma idealnych narzdzi? Z je sobie sam... biblioteka pythonowa >>> form scapy.all import * narzdzie (dostosowana konsola pythonowa) $ sudo scapy gwnie pod Linuxa, ale nowsza wersja dziaa te na Windows

Co Scapy robi z pakietami?


Tworzy oraz dekoduje pakiety dla wielu rnych protokow. Wysya, przechwytuje, czy zapytania i odpowiedzi...
wykonuje:

zastpuje:

prawie zastpuje:

Scapy - zaoenia
Pakiet - jako obiekt Payload jako atrybut pakietu Lista pakietw - jako obiekt Dobre ("sprytne") wartoci domylne adna warto nie jest zabroniona ;) Nie interpretuje - tylko dekoduje

Praktyka

scapy live

Zaczynamy
$ sudo scapy >> ls() >> lsc() #lista dostpnych typw #lista dostpnych funkcji

(w prezentacji podam tylko polecenia - wyniki do uzyskania samemu, dla leniwych - w tutorialu...)

Pakiety
a = IP(dst="192.168.1.1") #tak tworzymy pakiet b = a / TCP() #operator "/" wkada jeden pakiet do b.show() Ether() #"pakiet" ethernetowy a = Ether()/IP(dst="www.slashdot.org")/ TCP()/"GET /index.html HTTP/1.0 \n\n " hexdump(a) str(a) a[IP] #zwr pakiet tylko z warstwami od IP w gr

Wysyanie
send(IP(dst="1.2.3.4")/ICMP()) #wysyamy w warstwie IP send(IP(dst=("wp.pl","onet.pl"))/TCP(dport=[80,443])) #wiele wartoci - jeden obiekt przedstawia wiele pakietw rne moliwoci zapisu: #("wp.pl","onet.pl") #["wp.pl","onet.pl"] #"192.168.1.*" #"192.168.1.10-100" #"192.168.1.0/24" sendp(Ether()/IP(dst="1.2.3.4",ttl=(1,4)), iface="eth1") #send z literk "p" - wysyamy w warstwie 2 (Ethernet) sendp("I'm travelling on Ethernet", iface="wlan0", loop=1, inter=0.2) #powtarzaj wysyanie...

Wysyanie + odbieranie
ans,unans = sr(IP(dst='wp.pl')/ICMP()) #wylij i zbieraj odpowiedzi a do przerwania #domylne wartoci! dla ICMP: echo request p = sr1(IP(dst="8.8.8.8")/UDP() /DNS(rd=1,qd=DNSQR(qname="www.wp.pl"))) #wylij i czekaj na jedn odpowied p.sprintf("%.time% %-15s,IP.src% -> %-15s,IP.dst% %IP. chksum% %03xr,IP.proto%") #wydrukujmy... ans.make_table( #wydrukujmy tabelk... lambda(s,r): (s.dst, s.dport, r.sprintf( "{TCP:%TCP.flags%}{ICMP:%IP.src% - %ICMP.type%}" ))) #wasna notacja z klamrami i procentami...

Sniffing
tshark() sniff(iface="eth1", prn=lambda x: x.summary()) sniff(filter="icmp and host 66.35.250.151", count=2) pkts = sniff(prn=lambda x:x.sprintf( "{IP:%IP.src% -> %IP.dst%\n}{Raw:%Raw.load%\n}" )) pkts[TCP] #zwr tylko pakiety TCP pkts = sniff(filter="tcp and ( port 25 or port 110 )", prn=lambda x: x.sprintf( "%IP.src%:%TCP.sport% -> %IP.dst%:%TCP.dport% %2s,TCP.flags% : %TCP.payload%" ))

Dla wzrokowcw
### Gnuplot a.multiplot(lambda x: (x[Ether].src, len(x)))

### Graphviz res,unans = traceroute(["www.microsoft.com", "www.cisco.com","www.yahoo.com","www.wanadoo.fr", "www.pacsec.com"], dport=[80,443],maxttl=20,retry=-2) res.graph() #patrz nastpna plansza... res.trace3D() #kolejna plansza...

Jako biblioteka

#! /usr/bin/env python from scapy.all import * def arp_monitor_callback(pkt): if ARP in pkt and pkt[ARP].op in (1,2): return pkt.sprintf("%ARP.hwsrc% %ARP.psrc%") sniff(prn=arp_monitor_callback, filter="arp", store=0)

Fina
Scapy? Where is Scapy?.... http://www.secdev.org/projects/scapy/ Oczywicie jest tutorial :)

Pytania?

You might also like