Bro Script从IP地址

时间:2016-07-06 17:41:14

标签: bro

我使用Input :: add_table函数编写了一个兄弟脚本来查找IP及其相应的主机名并将它们插入到conn_id记录中 - 这样我就有了id.source_name&每个日志文件中的id.destination_name。这种方法很好,除非有隧道事件,并且它会因为分段错误而崩溃。我怀疑这与封装ID有关,但我真的不知道。我知道我可以添加src& dest命名为每种类型的Info记录,但这意味着修改每种类型。我试图做的根本不正确或隧道代码中是否存在导致崩溃的错误?或者有更好的方法来做到这一点

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

1 个答案:

答案 0 :(得分: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