2015-11-23 2 views
3

Je rencontre un problème avec l'option timeout de scapy lorsque je renifle des paquets. D'après ce que je comprends, si vous utilisez quelque chose comme ceci:L'option de temporisation Python-scapy ne fonctionne pas du tout

test = sniff(filter="ip and icmp ", timeout = 2) 
print(test) 

votre reniflement devrait expirer après 2 secondes. Cependant, cela ne fonctionne pas à 100%. De ce que j'ai compris, l'un des plus gros problèmes, si vous définissez timeout = 5 et exécutez le sniffer, puis exécutez un ping google.com dans une invite de commande parallèle, il va capturer les 4 paquets pas affiché jusqu'à renifler est fait alors asseyez-vous indéfiniment, jusqu'à ce que vous envoyez ou recevez 1 paquet ICMP plus, juste un, alors il va tuer le sniff et imprimer (test) avec 5 total icmp 4 du premier ensemble de ping, 1 du deuxième ping. J'utilise Windows, ce qui pourrait être le problème que je ne connais pas. J'ai python 2.7. mon script entier, pour tester cette 1 chose a dû l'isoler d'un script beaucoup plus est en tant que tel:

from scapy.all import * 



test = sniff(filter="ip and icmp ", timeout = 5) 
print(test) 

c'est - si timeout = 1, il ne s'arrêtera pas jusqu'à ce qu'un paquet est reçu aussi bien .

Ceci est le code de la sendrecv.py de scapy pour le délai sniff

if timeout is not None: 
    stoptime = time.time()+timeout 
remain = None 
while 1: 
    try: 
     if timeout is not None: 
      remain = stoptime-time.time() 
      if remain <= 0: 
       break 

Après l'extraction de la fonction de scapy sendrecv.py et réaliser la fonction a le même problème, j'ai rétréci le problème vers le bas. Il apparaît lorsque vous passez un filtre dans la fonction sniff, il modifie la façon dont fonctionne le timeout. Si vous exécutez:

d'importation scapy.all *

test = sniff(timeout = 5) 
print(test) 

vous serez très bien, il va délai d'attente automatique à 5 secondes, sinon il se bloque et ne termine pas la boucle de délai d'attente correctement.

+0

Cela ressemble plus à un bogue qu'à une question. Je vous recommande de le soumettre à la liste des problèmes scapy. Je viens de le vérifier sur scapy3k (http://github.com/phaethon/scapy), et je ne peux pas répéter le problème. En outre, il est significatif que vous nommez votre plate-forme car le code sendrcv dans scapy est différent pour différentes plates-formes. –

+0

quand vous dites nommer votre plate-forme, voulez-vous dire quelque chose comme ça? "J'utilise Windows, ce qui pourrait être le problème que je ne connais pas, j'ai python 2.7." Cela a déjà été inclus, sinon je ne sais pas de quoi d'autre vous parlez. –

+0

Désolé, n'a pas remarqué mention de Windows plus tôt. –

Répondre

0

J'ai essayé exactement le même code, et cela fonctionne parfaitement pour moi. Essayez de réinstaller scapy, ou revenez aux anciennes versions. J'ai trouvé que pour moi 2.2.0dev est l'une des versions les plus stables.