1

我创建了一个兄弟脚本,目的是从 pcap 文件中提取所有可能协议的所有文件。但我不想写所有日志。Bro 为每个协议创建一个日志文件。示例:“http.log”、“smtp.log”等。甚至会生成“weird.log”。我的 pcap 文件很大(20gb),所以每个日志文件包含超过 30mb 的信息。此日志生成会降低文件提取的性能。我可以使用该行禁用“conn.log”,Log::disable_stream(Conn::LOG)但是,所有协议日志记录呢?这是我的脚本

@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]);
    }
4

3 回答 3

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;
        }
    }
}

但这太可怕了,除非我发现我必须使用它,否则我不会使用它。

于 2018-06-20T00:19:10.990 回答
1

您可以none像这样使用编写器:

bro -r packets.pcap Log::default_writer=Log::WRITER_NONE

不过,我并不完全相信编写这些日志会以任何实际方式损害您的表现。通常,将文件写入磁盘是导致最大开销的原因。

于 2017-03-01T08:10:10.233 回答
0

我通过 main.bro 中的这行代码实现了这一点:

    Log::remove_filter(Conn::LOG, "default");
于 2018-05-16T19:34:31.953 回答