如何在Zeek的main.zeek中获取shell脚本传入的pcap文件名?
获取Zeek处理的PCAP文件名方法
先纠正你的错误定义
你写的global filename: function packet_source():完全无效,原因有两点:
packet_source()是Zeek的内置函数,默认已经可用,不需要手动声明为全局函数- 这个写法不符合Zeek的语法规则,函数声明格式错误
正确实现步骤
- 无需手动加载
base/bif/zeek.bif.zeek,该模块是Zeek默认加载的基础模块,不用额外引入 - 直接调用
packet_source()即可获取当前处理的PCAP文件完整路径,建议在初始化事件中调用,确保在数据包处理前拿到文件名
示例代码(main.zeek)
# 在Zeek初始化完成后触发的事件,适合获取PCAP文件名 event zeek_init() { # 获取PCAP文件的完整路径 local full_path = packet_source(); # 拆分路径,提取纯文件名(比如从"/tmp/test.pcap"得到"test.pcap") local filename = split_path(full_path)[1]; # 打印文件名到控制台 print fmt("正在处理的PCAP文件: %s", filename); # 可选:将文件名存入全局变量,供其他脚本或事件使用 global current_pcap = filename; }
补充说明
packet_source()返回的是你在shell命令中指定的$i的完整路径(如果$i是相对路径,返回的就是相对路径)- 如果需要在其他事件(比如
connection_new)中使用文件名,直接引用之前定义的全局变量current_pcap即可
内容的提问来源于stack exchange,提问作者SFD
相关产品推荐
相关产品推荐

