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 из первого набора пинга, 1 со второго пинга.
Я использую Windows, что может быть проблемой, которую я не знаю. У меня есть Python 2.7. весь мой сценарий, для тестирования этого 1 предмет должен был изолировать его от гораздо большего сценария как такового:
from scapy.all import *
test = sniff(filter="ip and icmp ", timeout = 5)
print(test)
вот и все - если timeout = 1, он не остановится, пока не будет получен пакет.
Это код из sendrecv.py от scapy для таймаута
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 импорт *
test = sniff(timeout = 5)
print(test)
у вас все будет в порядке, он автоматически отключится через 5 секунд, в противном случае он зависнет и не завершит цикл ожидания правильно.
1 ответ
Я попробовал точно такой же код, и он отлично работает для меня. Попробуйте переустановить scapy или вернуться к более старым версиям. Я обнаружил, что для меня 2.2.0dev является одной из наиболее стабильных сборок.