5 votes

Comportement de correspondance de paquets dans scapy

Contexte :

J'utilise Scapy pour tester un dispositif réseau qui peut reboucler les paquets de manière sélective en intervertissant les MAC source/dest, les adresses IP et les numéros de port de la couche 4. L'échange peut être sélectionné pour layer_2_only , layers_2_and_3 , layers_2_3_and_4 . Je fais tourner scapy sur un serveur, transmettant des paquets à l'appareil et validant que les paquets renvoyés ont les champs source/dest appropriés permutés en fonction de la configuration.

Problema:

Le scapy srploop() qui envoie des paquets et reçoit des correspondances, fonctionne bien pour des types de messages tels que PING et ARP. Je constate que si je transmets un paquet UDP et que les ports source/dest ne sont pas inversés par le dispositif de bouclage, alors Scapy ne traite pas le paquet bouclé comme une correspondance. Lorsque les numéros de port sont inversés par le dispositif de bouclage, les paquets sont détectés comme des correspondances.

Questions :

  1. Existe-t-il un moyen de surcharger ou d'influencer la logique de correspondance des paquets de scapy ? Par exemple, il serait utile de pouvoir désactiver la correspondance au niveau de la couche 4. J'ai regardé la documentation et je n'ai rien trouvé qui suggère que c'est possible.

  2. Existe-t-il un autre moyen d'y parvenir dans Scapy ? J'ai expérimenté l'utilisation de send() suivi de sniff() mais je n'ai pas réussi à capturer les réponses en utilisant cette méthode.

2voto

Asiri Rathnayake Points 607

Pour la deuxième partie de la question, vous pouvez essayer l'approche que j'ai mentionnée dans le document suivant Scapy ne parvient pas à renifler les paquets lors de l'utilisation de plusieurs threads .

En fait, il s'agit d'exécuter le renifleur dans un thread séparé et de filtrer le trafic de retour dans une file d'attente, à laquelle on peut ensuite accéder à partir du thread principal qui exécute la tâche send() . L'envoi et la réception se font donc en même temps (sur deux fils).

Le seul problème est que sur ma configuration particulière, j'ai rencontré un comportement bizarre dans le sniffer où il ne parvient pas à appliquer le filtre lorsqu'il est exécuté sur un thread séparé. J'espère que vous aurez plus de chance.

MISE À JOUR : Ce problème avec le sniffer a été résolu (voir ma question ci-dessus).

J'espère que cela vous aidera !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X