====== Scapy : les commandes de base ======
===== Utilisation de Scapy en interactif =====
Pour pouvoir manipuler les paquets réseaux, il est nécessaire d'être root pour une majorité de tâches lors du lancement de Scapy
* Lancement de l'interpréteur Python avec Scapy :
root@debian:~# scapy
INFO: Please, report issues to https://github.com/phaethon/scapy
WARNING: IPython not available. Using standard Python shell instead.
Welcome to Scapy (3.0.0)
>>>
===== Utilisation de Scapy dans un script Python =====
Pour pouvoir **utiliser** Scapy dans un **script Python**, il faut inclure la bibliothèque Scapy avec l'instruction :
from scapy.all import *
===== Les commandes de base =====
* Connaître la **liste des protocoles** supportés par Scapy :
>>> ls()
AH : AH
ARP : ARP
ASN1_Packet : None
BOOTP : BOOTP
CAN : CAN
CookedLinux : cooked linux
DHCP : DHCP options
DHCP6 : DHCPv6 Generic Message)
...
Plus de 150 protocoles réseaux supportés dont Ethernet, IP, IPv6, TCP, UDP, DNS, ICMP, DHCP, ARP, BOOTP, NetBIOS, NTP, Radius, SNMP, TFTP, etc.
Pour **visualiser** les informations contenues dans un objet de protocole (avec les valeurs par défaut) :
>>> ls(ARP)
hwtype : XShortField = (1)
ptype : XShortEnumField = (2048)
hwlen : ByteField = (6)
plen : ByteField = (4)
op : ShortEnumField = (1)
hwsrc : ARPSourceMACField = (None)
psrc : SourceIPField = (None)
hwdst : MACField = ('00:00:00:00:00:00')
pdst : IPField = ('0.0.0.0')
>>>
* connaître les **fonctions de base** de Scapy (environ une vingtaine):
>>> lsc()
arpcachepoison : Poison target's cache with (your MAC,victim's IP) couple
arping : Send ARP who-has requests to determine which hosts are up
bind_layers : Bind 2 layers on some specific fields' values
bridge_and_sniff : Forward traffic between two interfaces and sniff packets exchanged
corrupt_bits : Flip a given percentage or number of bits from bytes
...
* se documenter sur une fonction de Scapy. Exemple pour la fonction **send** :
>>> help(send)
Help on function send in module scapy.sendrecv:
send(x, inter=0, loop=0, count=None, verbose=None, realtime=None, *args, **kargs)
Send packets at layer 3
send(packets, [inter=0], [loop=0], [verbose=conf.verb]) -> None
(END)
* se documenter sur une méthode proposée par un protocole supporté par Scapy. Exemple pour le protocole **IP** :
>>> dir(IP)
['__bool__', '__bytes__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dict__', '__dir__', '__div__', '__doc__', '__eq__', '__format__', '__ge__', '__getattr__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__module__', '__mul__', '__ne__', '__new__', '__rdiv__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__rtruediv__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', '__truediv__', '__weakref__', '_do_summary', 'add_payload', 'add_underlayer', 'aliastypes', 'answers', 'build', 'build_done', 'build_padding', 'build_ps', 'canvas_dump', 'clone_with', 'command', 'copy', 'decode_payload_as', 'default_payload_class', 'delfieldval', 'display', 'dissect', 'dissection_done', 'do_build', 'do_build_payload', 'do_build_ps', 'do_dissect', 'do_dissect_payload', 'do_init_fields', 'explicit', 'extract_padding', 'fields_desc', 'firstlayer', 'fragment', 'from_hexcap', 'get_field', 'getbyteval', 'getdictval', 'getfield_and_val', 'getfieldval', 'getlayer', 'getstrval', 'guess_payload_class', 'hashret', 'haslayer', 'hide_defaults', 'hops', 'init_fields', 'initialized', 'is_priv_addr', 'lastlayer', 'libnet', 'lower_bonds', 'mysummary', 'name', 'ottl', 'overload_fields', 'payload_guess', 'pdfdump', 'post_build', 'post_dissect', 'post_dissection', 'pre_dissect', 'psdump', 'raw_packet_cache', 'remove_payload', 'remove_underlayer', 'route', 'self_build', 'send', 'sent_time', 'setfieldval', 'show', 'show2', 'show_indent', 'sprintf', 'summary', 'underlayer', 'upper_bonds', 'whois']
==== Retour à Python : la bibliothèque Scapy ... ====
* [[dev:python:scapy:accueil|Python : la bibliothèque Scapy pour manipuler les paquets réseau]]