Python - опция scapy timeout вообще не работает

У меня проблема с параметром тайм-аута scapy при прослушивании пакетов. Насколько я понимаю, если вы используете что-то вроде этого:

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

ваше обнюхивание должно прекратиться через 2 секунды. Однако это на 100% не работает. Из того, что я понял, одна из самых больших проблем заключается в том, что если вы установите timeout = 5 и запустите сниффер, а затем запустите ping google.com в параллельной командной строке, он захватит 4 пакета , которые не отображаются пока обнюхивание не будет выполнено, затем сидите там бесконечно, пока вы не отправите или не получите еще 1 пакет icmp, только один, затем он убьет снифф и напечатает (тест) с 5 всего icmp 4 из первого набора ping , 1 со второго пинга.

Я использую окна, возможно, я не знаю об этом. У меня питон 2.7. Весь мой сценарий, для тестирования этой 1 вещи, пришлось изолировать ее от гораздо более крупного сценария, выглядит так:

from scapy.all import *



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

вот и все - если timeout = 1, он не остановится, пока также не будет получен пакет.

Это код из scapy sendrecv.py для тайм-аута сниффа.

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

После извлечения функции из scapy sendrecv.py и осознания того, что функция имеет ту же проблему, я сузил проблему. Похоже, что когда вы передаете фильтр в функцию сниффинга, он меняет способ работы тайм-аута. Если вы запустите:

из scapy.all import *

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

все будет в порядке, тайм-аут будет автоматически равен 5 секундам, иначе он зависнет и не завершит цикл тайм-аута должным образом.


person In the stars    schedule 23.11.2015    source источник
comment
Это больше похоже на ошибку, чем на вопрос. Я рекомендую вам отправить его в scapy список проблем. Я только что проверил это на scapy3k (github.com/phaethon/scapy), и я не могу повторить проблему . Также важно, что вы называете свою платформу так, как код sendrcv в scapy отличается для разных платформ.   -  person Eriks Dobelis    schedule 25.11.2015
comment
когда вы говорите название своей платформы, вы имеете в виду что-то вроде этого? Я использую окна, возможно, я не знаю об этом. У меня питон 2.7. Это уже было включено, если нет, я не знаю, что еще вы имели в виду.   -  person In the stars    schedule 25.11.2015
comment
Извините, раньше не заметил упоминания о винде.   -  person Eriks Dobelis    schedule 25.11.2015
comment
Я знаю, что Windows - это не самая поддерживаемая платформа, но при выполнении проекта класса и инструктора Linux не будет использоваться. Нужно убедиться, что здесь он работает.   -  person In the stars    schedule 25.11.2015
comment
Как я уже сказал - у меня работает на Windows. Просто использую scapy3k. Возможно, ваш инструктор примет python3.   -  person Eriks Dobelis    schedule 25.11.2015


Ответы (1)


Я пробовал точно такой же код, и он отлично работает у меня. Попробуйте переустановить scapy или вернитесь к более старым версиям. Я обнаружил, что для меня 2.2.0dev - одна из самых стабильных сборок.

person Community    schedule 18.06.2016