2016-07-06 92 views
1

我已经使用Input :: add_table函数编写了一个bro脚本来查找IP及其相应的主机名并将它们插入到conn_id记录中 - 以便我拥有id.source_name &每个日志文件中的id.destination_name。这可以正常工作,除非发生隧道事件,并且会导致分段错误导致Bro崩溃。我怀疑这是与封装ID有关,但我不知道。我知道我可以为每个类型的Info记录添加src & dest名称,但这意味着需要修改每种类型。我试图做的根本不正确或隧道代码中导致崩溃的错误?还是有更好的办法做到这一点Bro脚本从IP地址查找主机名

export { 
global host_table: table[addr] of Val = table(); 
} 

redef record conn_id += { 
    src_name: string &optional &log; 
    dest_name: string &optional &log; 
}; 

const host_file = “hosts.txt” 

event bro_init() &priority=20 
{ 
    Input::add_table([$source=host_file, $name =“host_stream”, $idx=Idx, $val=Val, $destination=host_table]); 
    Input::remove(“host_stream”); 
} 

event new_connection(c: connection) { 
    if(c$id$orig_h in host_table) { 
     c$id$src_name = host_table[c$id$orig_h]$host; 
    } 
    if(c$id$resp_h in host_table) { 
     c$id$dest_name = host_table[c$id$resp_h]$host; 
    } 
} 

回答

2

不幸的是,你不想延长conn_id记录。它以多种方式在内部使用,这种变化会影响到这些方面。我会延长Conn::Info记录并在那里添加数据。

你的脚本是缺少一些作品,我想使答案更可用的人在将来让我填写了缺失的领域:

@load base/protocols/conn 

module MyHostNames; 

export { 
    ## File to load hostnames from. 
    const host_file = "hosts.txt" &redef; 
} 

type Idx: record { 
    host: addr; 
}; 

type Val: record { 
    hostname: string; 
}; 

global host_table: table[addr] of Val = table(); 

redef record Conn::Info += { 
    orig_name: string &optional &log; 
    resp_name: string &optional &log; 
}; 

event bro_init() &priority=5 
    { 
    Input::add_table([$source=host_file, 
         $name="myhostnames_stream", 
         $idx=Idx, 
         $val=Val, 
         $destination=host_table]); 
    Input::remove("myhostnames_stream"); 
    } 

event connection_state_remove(c: connection) 
    { 
    if (c$id$orig_h in host_table) 
     { 
     c$conn$orig_name = host_table[c$id$orig_h]$hostname; 
     } 

    if (c$id$resp_h in host_table) 
     { 
     c$conn$resp_name = host_table[c$id$resp_h]$hostname; 
     } 
    } 

我用,看起来像这样的输入文件(保留记住这个数据列之间的一些字面标签!):

#fields host hostname 
#types addr string 
1.2.3.4 special-host 
+0

说说挖掘到康恩记录来处理持续时间的人。 :) :) –