2016-07-06 11 views
1

Input :: add_table関数を使用してIPとその対応するホスト名を検索し、conn_idレコードに挿入するbroスクリプトを作成しました。id.source_name &すべてのログファイルのid.destination_nameこれは、トンネルイベントが存在し、セグメンテーションエラーでbroがクラッシュする場合を除いて、正常に機能します。私はこれがカプセル化IDと関係があると考えていますが、実際には分かりません。私は各タイプのInfoレコードにsrc & dest名を追加することができますが、それはすべてのタイプを変更することを意味します。根本的に間違っているか、クラッシュの原因となっているトンネルコードにバグがありますか?それとも残念ながら、あなたがconn_idレコードを拡張する必要はありません。この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::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; 
     } 
    } 

私は(キープ次のようになり、入力ファイルを使用しました列の間のこのデータの文字通りのタブを念頭に置いてください):

+0

継続時間の処理を処理するためにConnレコードをタップした人に言います。 :) :) –

関連する問題