У меня есть сценарий bash, который я собрал для объединения нескольких захватов пакетов на основе общего фильтра. Я запускаю daemonlogger на заднем конце, и он катит файлы pcap на основе размера, поэтому его трудно получить всю картину иногда, поскольку данные, которые я ищу, могут быть в одном файле pcap, а остальные в другом. Самая большая проблема У меня есть неспособность ускорить этот процесс. Он может обрабатывать только один pcap за раз. Кто-нибудь есть рекомендации относительно того, как ускорить это с помощью нескольких подпроцессов или нескольких потоков?ускорить скрипт bash с помощью многопоточности?
#!/bin/bash
echo '[+] example tcp dump filters:'
echo '[+] host 1.1.1.1'
echo '[+] host 1.1.1.1 dst port 80'
echo '[+] host 1.1.1.1 and host 2.2.2.2 and dst port 80'
echo 'tcpdump filter:'
read FILTER
cd /var/mycaps/
DATESTAMP=$(date +"%m-%d-%Y-%H:%M")
# make a specific folder to drop the filtered pcaps in
mkdir /var/mycaps/temp/$DATESTAMP
# iterate over all pcaps and check for an instance of your filter
for file in $(ls *.pcap); do
tcpdump -nn -A -w temp/$DATESTAMP/$file -r $file $FILTER
# remove empty pcaps that dont match
if [ "`ls -l temp/$DATESTAMP/$file | awk '{print $5}'`" = "24" ]; then
rm -f "temp/$DATESTAMP/$file"
fi
done
echo '[+] Merging pcaps'
# cd to your pcap directory
cd /var/mycaps/temp/${DATESTAMP}
# merge all of the pcaps into one file and remove the seperated files
mergecap *.pcap -w merged.pcap
rm -f original.*
echo "[+] Done. your files are in $(pwd)"
НЕ ИСПОЛЬЗУЙТЕ выход ls для чего-либо. ls - инструмент для интерактивного просмотра метаданных каталога. Все попытки разобрать вывод ls с кодом нарушены. Globs намного проще и правильнее: 'для файла в * .txt'. Прочитайте [Parsing ls] (http://mywiki.wooledge.org/ParsingLs). Также я предлагаю запустить ваш скрипт в [Shell Check] (http://www.shellcheck.net/) –
** многопоточность ** требует поддержки во время выполнения, недоступной из любой оболочки, о которой я знаю. То, что вы * можете сделать (как показано, например, по решению Чеснера), не многопоточно, а ** многопроцессорное **. –