Я обрабатываю вывод tcpdump в Ubuntu 16.04LTS с помощью следующей команды:
$ sudo tcpdump -i wlan0 -e -s 64 -n -j adapter -K -l | python script.py
Это работает, но, к сожалению, слишком много пакетов для обработки скриптами, которые я хочу написать, поэтому я хотел бы удалить пакеты, которые приходят с одного и того же IP-адреса, чтобы они приходили каждые 100 мс или около того. Я не вижу способа сделать это на странице руководства tcpdump. Есть ли способ сделать это?
Я видел, что можно настроить размер буфера с помощью -B
, но когда я пытаюсь выполнить следующее с помощью тестового скрипта Python (который просто выводит то, что он читает на stdin):
$ sudo tcpdump -i wlan0 -e -s 64 -n -j adapter -K -B 64 -l | python test.py
Я не получаю ничего, кроме пустых строк, выводимых на терминал. Я не понимаю, как работает буфер, потому что если я не передаю его в скрипт, вывод на терминал работает нормально с помощью:
$ sudo tcpdump -i wlan0 -e -s 64 -n -j adapter -K -B 64 -l
(скрипт Python):
import sys
while True:
print sys.stdin.readline()
Может ли кто-нибудь объяснить, есть ли способ эффективно ограничить количество пакетов в секунду с каждого IP-адреса, которые выводятся, и если нет, как работает опция -B, и можно ли ее передать в скрипт Python, подобный этому?
решение1
После проб и ошибок я обнаружил, что если я попробую что-то ниже 256 в опции -B, это не сработает. Так что, если это поможет кому-то еще, используйте по крайней мере-B 256