我创建了一个bro脚本,目的是从pcap文件中提取所有可能的协议的所有文件。但是我不想写所有的日志。Bro为每个协议创建一个日志文件。例如:'http.log','smtp.log‘等。甚至会生成一个'weird.log’。我的pcap文件很大(20 of ),所以每个日志文件包含超过30mb的信息。这种日志生成会降低文件提取的性能。我可以使用行Log::disable_stream(Conn::LOG)禁用'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]);
}发布于 2017-03-01 16:10:10
您可以像这样使用none编写器:
bro -r packets.pcap Log::default_writer=Log::WRITER_NONE不过,我并不完全相信写这些日志会以任何真正的方式损害你的性能。通常,将文件写入磁盘是导致最大开销的原因。
发布于 2018-06-20 08:19:11
这里有一种方法可以关闭任何已经打开的日志记录(在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-05-17 03:34:32
我用main.bro中的这行代码实现了这一点:
Log::remove_filter(Conn::LOG, "default");https://stackoverflow.com/questions/40721927
复制相似问题