我创建了一个兄弟脚本,目的是从pcap文件中提取所有可用协议的所有文件。但我不想写所有日志。 Bro为每个协议创建一个日志文件。示例:'http.log','smtp.log'等。甚至生成'weird.log'。我的pcap文件很大(20gb),因此,每个日志文件包含超过30mb的信息。此日志生成会降低文件提取的性能。
我可以使用行@load base/files/extract
event bro_init()
{
Log::disable_stream(Conn::LOG);
}
event file_sniff(f: fa_file, meta: fa_metadata)
{
local ext = "";
if ( meta?$mime_type )
ext = split_string(meta$mime_type, /\//)[1];
local fname = fmt("%s-%s.%s", f$source, f$id, ext);
Files::add_analyzer(f, Files::ANALYZER_EXTRACT, [$extract_filename=fname]);
}
禁用'conn.log',但是,所有协议日志记录呢?
这是我的剧本
{{1}}
答案 0 :(得分:1)
您可以像这样使用none
作家:
bro -r packets.pcap Log::default_writer=Log::WRITER_NONE
我并不完全相信编写这些日志会以任何真实的方式损害您的性能。通常,将文件写入磁盘会导致最大的开销。
答案 1 :(得分:1)
这是一种关闭所有日志记录(在bro_init
之前)的方法,而无需知道哪些流ID是相关的:
event bro_init()
{
# We don't want any output other than from this script.
for (id in Log::active_streams)
Log::disable_stream(id);
}
这种构造使我在迭代表时略微修改了表,但是它似乎有效,而且如果不进行迭代,我实际上找不到从表中窥视一个键的任何方法。我想一个人可以写
event bro_init()
{
while (|Log::active_streams|) {
for (id in Log::active_streams) {
Log::disable_stream(id);
break;
}
}
}
但这很可怕,除非我发现必须这样做,否则我不会使用它。
答案 2 :(得分:0)
我用main.bro中的这行代码实现了这一点:
Log::remove_filter(Conn::LOG, "default");