Я не очень опытный сценарист вообще. Я нашел несколько полезных советов по генерации stdout из tcpdump который генерирует прямую трансляцию, если хотите, то, что я хочу, проблема заключается в обработке вывода и генерации запросов dig/DNS к другому DNS-серверу для лаборатории.

Дайте мне вывод, который я ищу:

tcpdump -lvi any "udp port 53" 2>/dev/null|grep -E 'A\?'|awk '{print $(NF-1)}'

Я пробовал это просто тестирование добавления вывода в массив, но я ничего не получаю

declare -a testarr
testarr=( $(tcpdump -lvi any "udp port 53" 2>/dev/null|grep -E 'A\?'|awk '{print $(NF-1)}') )
echo ${testarr[@]}

Я также пытался

dig @1.1.1.1 $(tcpdump -lvi any "udp port 53" 2>/dev/null|grep -E 'A\?'|awk '{print $(NF-1)}')

Любая помощь приветствуется.

1 ответ1

0

Проблема в том, что $() возвращается только при выходе из tcpdump , но в вашем случае он никогда не завершится. Вы можете перенаправить вывод в команду xargs - она может запустить dig до выхода из tcpdump

пример кода:

tcpdump -nvi any "udp port 53" 2>/dev/null|awk '/A\?/{print $(NF-1);fflush()}' | xargs -n 1 dig @1.1.1.1 

Также обратите внимание, что вывод awk может быть буферизован, поэтому вы должны сбросить вывод в вашей программе awk .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .