Network Tools: Scapy
Wednesday, April 01st, 2009 | Author:

Probabil cel mai interesant lucru cu care am lucrat la cursul de Securitate [1] a fost Scapy. Auzisem de el, ştiam ce este şi ce face dar mi-a plăcut să îl văd prezentat de către cel ce l-a creat şi să fac un laborator cu el.

Scapy [2] este mai mult un framework scris în Python pentru manipularea traficului de reţea. Rulează peste interpretorul Python şi oferă o serie de classe/obiecte ce reprezintă protocoale de reţea. Nu are o interfaţa grafică şi nu este foarte user-friendly (decât pentru cei ce sunt obişnuiţi cu Pyton), dar este un utilitar foarte puternic pentru testarea reţelelor. Permite în primul rând capturarea pachetelor şi analizarea lor în detaliu, strat cu strat. Dar mai important oferă posibilitatea de a crea pachete şi de a le trimite pe mediu.

Ultima versiune de Scapy este disponibilă la [2] http://scapy.net (download direct de la adresă).

Tip:  puteţi să daţi “chmod +x scapy-latest.zip” şi să rulaţi Scapy cu “./scapy-latest.zip”.

Pentru o captură simplă de pachete putem folosi comanda sniff. Un exemplu:

my_cap = sniff(prn=lambda p:p.summary(), timeout=60)

În variabila my_cap va fi stocat traficul sub forma unei liste. Funcţia lamba specifică ce din trafic să salveze în listă iar timeout specifică câte secunde să captureze. Rezultatul din variabilă poate fi refolosit pentru orice analiză.

Folosind nişte biblioteci de imagine din Python putem crea o imagine vizuală a traficului. Pentru a face un graf ce conţine legăturile dintre staţii putem folosi “my_cap.conversations()” iar rezultatul este ceva de genul următor:

img_scap

Pentru a genera şi trimite un pachet de date, creăm instanţe de obiecte, encapsulăm datele şi le trimitem. Exemplu (parametrii sunt flexibili) :

>>> my_packet = IP(dst=”192.168.208.1″)

>>> my_packet.ttl = 12

>>> my_segment = TCP(dport= 2346)

>>> send(my_packet/my_segment/”test”)

“/” este operatorul de encapsulare. Payload-ul (un string, “test”) este encapsulat cu un header TCP (my_segment) care este la rândul lui encapsulat într-un pachet IP.

Rezultatul pe destinaţie

scapy

Scapy este Open Source (sau în franceză, pentru că este este scris de un francez, Logiciel libre).

[1] http://alexj.info/?p=716

[2] http://www.secdev.org/projects/scapy/

[3] http://scapy.net