Я пытаюсь запустить несколько параллельных экземпляров tshark, чтобы прочесать большое количество файлов pcap в каталоге и скопировать отфильтрованное содержимое в новый файл. Я столкнулся с проблемой, из-за которой Tshark выдает ошибку по команде, которой я его кормлю.
Это должно быть как-то связано с тем, как tshark интерпретирует командную строку, поскольку я могу скопировать / вставить отформатированную командную строку в консоль, и она прекрасно работает. Я попытался отформатировать команду несколькими способами и прочитать темы от других, у которых были подобные проблемы. Я верю, что форматирую правильно ... но все равно получаю ошибку.
Вот с чем я работаю:
Сценарий № 1: - фильтр
#Takes user arguments <directory> and <filter> and runs a filter on all captures for a given directory.
#
#TO DO:
#Add user prompts and data sanitization to avoid running bogus job.
#Add concatenation via mergecap /w .pcap suffix
#Delete filtered, unmerged files
#Add mtime filter for x days of logs
starttime=$(date)
if [$1 = '']; then echo "no directory specified, you must specify a directory (VLAN)"
else if [$2 = '']; then echo "no filter specified, you must specify a valid tshark filter expression"
else
echo $2 > /home/captures-user/filtered/filter-reference
find /home/captures-user/Captures/$1 -type f | xargs -P 5 -L 1 /home/captures-user/tshark-worker
rm /home/captures-user/filtered/filter-reference
fi
fi
echo Start time is $starttime
echo End time is $(date)
Сценарий № 2: - tshark-рабочий
# $1 = path and file name
#takes the output from the 'filter' command stored in a file and loads a local variable with it
filter=$(cat /home/captures-user/filtered/filter-reference)
#strips the directory off the current working file
file=$(sed 's/.*\///' <<< $1 )
echo $1 'is the file to run' $filter 'on.'
#runs the filter and places the filtered results in the /filtered directory
command=$"tshark -r $1 -Y '$filter' -w /home/captures-user/filtered/$file-filtered"
echo $command
$command
Когда я запускаю ./filter ICE 'ip.addr == 1.1.1.1'
, я получаю следующий вывод для каждого файла. Обратите внимание, что включение ==
в выражение фильтра не является проблемой, я попытался заменить 'или' и получить тот же результат. Кроме того, у tshark нет псевдонимов, и нет сценария с таким именем. Это сырой исполняемый файл tshark в /usr/sbin.
Выход:
/home/captures-user/Captures/ICE/ICE-2019-05-26_00:00:01 is the file to run ip.addr == 1.1.1.1 on.
tshark -r /home/captures-user/Captures/ICE/ICE-2019-05-26_00:00:01 -Y 'ip.addr == 1.1.1.1' -w /home/captures-user/filtered/ICE-2019-05-26_00:00:01-filtered
tshark: Display filters were specified both with "-d" and with additional command-line arguments.