Un peu de Pratique
Un peu de Pratique:
Envoie/Réception de Paquets:
Scapy permet de forger vos propres paquets "ls" (pour voir la liste complète sous scapy), et nous allons voir dans cette partie
comment envoyer et comment recevoir des paquets.
Emission:
Envoyons un simple paquet TCP/IP vers google.fr sur le port 80.*
Listons tout d'abord les champs disponible pour les protocoles IP et TCP:
Pour notre simple exemple, nous utiliserons les champs dst et ttl pour le protocole IP et le champ dport pour le protocole TCP.
Pour envoyer ce paquets nous devons d'abord le créer en stockant les différentes informations dans une variable pour finalement l'envoyer:
On peut également l'envoyer à l'infini avec l'option loop:
Cette exemple est très simple, mais il est largement suffisant pour comprendre comment crée un paquet de données, il y a néanmoins quelques variantes.
En effet nous avons utilisé la commande send() car nous somme en couche 3, néanmoins, pour un paquet de type ARP en couche 2, la commande à utiliser est sendp().
Emission & Reception:
Scapy nous propose aussi d'envoyer et de recevoir les réponses avec les commandes sr(),sr1() et srp(), srp1():
Reniflage:
Pleins de ressources (et nous voyons ici que les fonctionnalités de bases), Scapy offre la possibilité de renifler le trafic réseau via la commande sniff():
On peut préciser l'interface que l'on veut utiliser avec l'option iface.
Nous pouvons maintenant lister les paquets reçu (ici uniquement de l'UDP) avec la commande summary():
Mais aussi les lister en les numérotant en utilisant la commande show():
Analyse de paquets
Profitons de cette capture réseau pour introduire quelques rudiments sur l'analyse des paquets reçu (rien de poussé, ce n'est qu'une introduction):
trafic est notre liste de paquet capturé.
Commande | Description |
trafic[n] | Accés au paquet n |
trafic[n].show() | Affichage propre du paquet n |
trafic[n][proto] | Accés uniquement au protocol "proto" du paquet n (exemple: trafic[0][UDP]) |
trafic[n].[proto].champs | Accés au champs du protocol "proto" du paquet n (exemple: trafic[0][IP].dst) |
trafic[0].haslayer(proto) | Retourne 1 si le protocol "proto" est présent dans le paquet n 0 sinon (exemple: trafic[0].haslayer(TCP)) |
Traitement de paquet à la volée:
Un titre bien bizarre, n'est-il pas? :)
la fonction sniff() de scapy, qui nous permet comme vous l'avez vu de reniffler le trafic réseau nous propose l'option prn.
Cette option nous permet de définir une fonction qui sera appliqué a chaque paquet sniffé.
Mais voyons plutôt ça, par un petit exemple, où nous définirons une fonction qui affichera les adresses IP Source: