Scapy a été architecturé pour fonctionner dans un mode stimulus-réponse. C'est tout ce qui est nécessaire pour accomplir scan de ports, traceroutes, collectes d'IP ID, etc. Mais lorsqu'il s'agit de transfert de fichier TFTP ou de connexion TCP, où l'échange de paquets n'est plus une suite stimulus-réponse-stimulus-réponse-..., c'est insuffisant. Nous allons donc voir deux façons de parler d’un protocole qui échangerait des messages dans une connexion TCP, en s'attardant sur les facilités offertes par Scapy pour créer des automates réseau. D'autres méthodes existent et sont détaillées dans [5,6,7,8].
1. Les messages
Nous supposons que nous devons nous interfacer avec un protocole constitué d'un échange de messages triviaux, mais sur TCP. Voici l'implémentation Scapy décrivant ces messages :
class Message(Packet):
fields_desc = [ FieldLenField("len",None, fmt="H", length_of="msg"),
StrLenField("msg", "", length_from=lambda pkt:pkt.len) ]
def extract_padding(self, pay):
return "",pay
Ces messages sont donc constitués d'un champ de longueur sur 2…
- Accédez à tous les contenus de Connect en illimité
- Découvrez des listes de lecture et des contenus Premium
- Consultez les nouveaux articles en avant-première