ScaPy je biblioteka za Python koja pruža sastavljanje paketa od “parčića”. Na primer, možemo IP deo spojiti sa TCP delom i na kraju konkretan sadržaj paketa i to poslati serveru. Pored ovoga, ova biblioteka nam pruža i mogućnost “slušanja” dolazećih poruka i odgovaranje na njih.

U nastavku teksta je dato nekoliko primera upotrebe biblioteke.

Uključivanje paketa

pre svega mala napomena, da bismo koristili naredne funkcionalnosti, moramo imati administratorske privilegije. Možda ovo može da se izbegne na neki način ali meni nije uspelo, ako neko uspe, napišite komentar. :)

Uključivanje biblioteke se radi na sledeći način:

from scapy.all import * 

Sastavljanje paketa

Ako želimo da sastavimo neki paket koji u svom IP delu sadrži adresu odredišta, u svom TCP delu sadrži odredišni port sa sadržajem datim kao string, to možemo učiniti na sledeći način:

pkt = IP(dst="192.168.4.5")/TCP(dport=55)/"Poruka"

Ovaj paket možemo poslati na sledeći način

send(pkt)

a ako želimo da pošaljemo paket i da odmah dobijemo odgovor, to možemo ovako:

ans, unans = sr(pkt)

promenljiva ans sadrži listu odgovora od servera.

Nadzor protoka

Ako želimo da vršimo nadzor protoka, možemo koristiti funkciju sniff. Prvo implementiramo callback funkciju koja će se izvršiti svaki put kad željeni paket prođe filter odnosno kad stigne do nas.

Naredni primer ilustruje nadzor svih ARP paketa:

def arp_monitor_callback(pkt):
    if ARP in pkt and pkt[ARP].op in (1,2): #who-has or is-at
        op = ""
        if pkt[ARP].op == 1: 
            op = "Who has "
        else:
            op = "Is at"
        return op + pkt.sprintf("%ARP.hwsrc% %ARP.psrc%")

sniff(prn=arp_monitor_callback, filter="arp", store=0)

Drugi primer ilustruje nadzor svega na portu 80

def tcp_func(pkt):
    if TCP in pkt and pkt[TCP].dport == 80:
        return str(pkt)

sniff(prn=tcp_func, filter="tcp", store=0)

Za više

ScaPy ima jako dobru dokumentaciju pa tako može se dosta primera videti. Ovde je obrađena najtrivijalnija upotreba. Ipak, ovo je meni bilo dovoljno da radi ARP poisoning recimo. Happy coding.