Я хочу остановить перехват пакетов при непрерывном сниффинге, как только условие выполнено - PullRequest
0 голосов
/ 09 октября 2019

Проблема

Я написал скрипт, который перехватывает пакеты от хоста, однако я перехватываю пакеты в непрерывном режиме и хотел бы прекратить перехватывать по таймауту. Я написал следующий код для остановки перехвата пакетов, но он не останавливается, когда время явно превысило время ожидания. Что я мог сделать здесь не так?

import time
import pyshark

prog_start = time.time()
capture = pyshark.LiveCapture(interface='en0')
capture.sniff(timeout=10)
start_time = capture[0].frame_info.time_epoch
end_time = capture[-1].frame_info.time_epoch
print("Capture lasted:", float(end_time) - float(start_time))
pkt_num = 0
for pkt in capture:
    pkt_num += 1
    print("Time", time.time() - prog_start, "Pkt#", pkt_num)

Затем мы получаем этот вывод с тысячами дополнительных пакетов в секунду, после того, как захват должен был остановиться:

Capture lasted: 9.148329019546509
Time 10.346031188964844 Pkt# 1
Time 10.348641157150269 Pkt# 2
Time 10.351708889007568 Pkt# 3
Time 10.353564977645874 Pkt# 4
Time 10.35555100440979 Pkt# 5
...

Вопрос

Почему PyShark продолжает перехватывать пакеты после истечения времени ожидания?

1 Ответ

0 голосов
/ 09 октября 2019

Проблемы с PyShark

Похоже, вы столкнулись с известной проблемой с PyShark, которая не устранялась годами. Автор пишет:

Вы можете создать подкласс LiveCapture и переопределить функцию get_parameters (), добавив свои собственные параметры.

Вы можете изменить параметры, отправленные в tshark. , но на этом этапе, почему бы просто не использовать команду tshark напрямую?

Использование Tshark Вместо

PyShark - это просто оболочка для tshark в вашей системе. Если вы хотите использовать подпроцесс с Python, эквивалентная команда tshark будет tshark -a duration:5. Другое преимущество использования tshark напрямую состоит в том, что подпроцесс дает вам pid, который вы можете убить при произвольном условии.

Подробнее см. На manpage .

...