2016-07-06 64 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

說說挖掘到康恩記錄來處理持續時間的人。 :) :) –