PCAP 脚本。
我有一台具有 32 个处理器的服务器,需要最大化此脚本以利用这些处理器。目前,该程序tshark
仅使用 1 个处理器,因此我需要tshark
同时运行多个实例。目前,下面脚本中定义的循环一次执行 1 个 pcap,速度非常慢。我需要一次运行最多 15tshark
秒,但不能超过这个时间,直到循环到达文件末尾。
本质上,该脚本读取某些 pcap 文件并在文本文件中列出 pcap,然后使用tshark
进行过滤,然后使用mergecap
.
在此示例中,有 5 个要过滤的 pcap 文件。
- full_cap_1589
- full_cap_1590
- full_cap_1591
- full_cap_1592
- full_cap_1593
#!/bin/bash # 解析 pcap 文件的测试脚本 #DATE=`日期 |awk '{print $2}'` 设置-x echo“开始时间 - 月/日时间示例:07/19 08:00” 读取-e日期1 echo "结束时间 - 月/日时间示例 07/19 08:35" 读取-e日期2 echo "要过滤什么IP地址?" 读取-e ip 回显 $ip FIND=`查找 /mnt/pcap/captures/ -type f -newermt "$date1" ! -newermt“$date2” |切-c20-40 > /home/用户名/loading_dock/load.txt` #for full_caps in "${FIND[@]}" 对于我在 `cat /home/username/loading_dock/load.txt` 做 tshark -r /mnt/pcap/captures/$i "-Y ip.addr == $ip" -w /home/用户名/loading_dock/$i.pcap 完毕 mergecap -w /home/用户名/loading_dock/*.pcap -w /home/用户名/test1.pcap rm -rf /home/用户名/loading_dock/*.pcap rm -f /home/用户名/loading_dock/load.txt 出口0
答案1
你可以使用 GNU 并行吗:
parallel -j15 tshark -r /mnt/pcap/captures/{} \'"-Y ip.addr == $ip"\' -w /home/username/loading_dock/{}.pcap :::: /home/username/loading_dock/load.txt
GNU Parallel 是一个通用并行器,可以轻松地在同一台计算机或多台您可以通过 ssh 访问的计算机上并行运行作业。
如果您想要在 4 个 CPU 上运行 32 个不同的作业,则并行化的直接方法是在每个 CPU 上运行 8 个作业:
相反,GNU Parallel 在完成后会生成一个新进程 - 保持 CPU 处于活动状态,从而节省时间:
安装
出于安全原因,您应该使用软件包管理器安装 GNU Parallel,但如果 GNU Parallel 未针对您的发行版打包,您可以进行个人安装,这不需要 root 访问权限。这样做可以在 10 秒内完成:
(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash
对于其他安装选项,请参阅http://git.savannah.gnu.org/cgit/parallel.git/tree/README
了解更多
查看更多示例:http://www.gnu.org/software/parallel/man.html
观看介绍视频:https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1
浏览本教程:http://www.gnu.org/software/parallel/parallel_tutorial.html
注册电子邮件列表以获得支持:https://lists.gnu.org/mailman/listinfo/parallel