我根本不是一个经验丰富的脚本编写者。我确实找到了一些有用的提示,可以生成一个可以生成实时源的stdout
源tcpdump
,这正是我想要的,问题在于处理输出并为实验室生成针对另一台 DNS 服务器的 dig/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
问题是,$()
只有在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
程序中刷新输出。