zeek/policy.old/summaries/netbios-ssn-summary.bro
2011-03-01 10:51:44 -05:00

112 lines
2.5 KiB
Text

@load app-summary
redef capture_filters = {
["netbios-ssn"] = "tcp port 139",
};
module NetbiosSSN_summary;
global netbios_log = open_log_file("netbios-ssn-summary") &redef;
const netbios_msg_types = {
[0x0] = "ssn_message",
[0x81] = "ssn_request",
[0x82] = "positive_resp",
[0x83] = "negative_resp",
[0x84] = "retarget_resp",
[0x85] = "keep_alive",
} &default = function(msg_type: count): string
{
return fmt("unknown-0x%x", msg_type);
};
type netbios_ssn_transaction: record {
connection_id: conn_id;
conn_start: time;
start: time;
num_req: count;
req_size: count;
num_resp: count;
resp_size: count;
req_type: string;
resp_type: string; # ... of the first reply
raw_ssn_msg: count;
};
global netbios_ssn_trans_table: table[conn_id] of netbios_ssn_transaction;
function end_netbios_ssn_transaction(id: conn_id)
{
if ( id !in netbios_ssn_trans_table )
return;
local t = netbios_ssn_trans_table[id];
print_app_summary(netbios_log, t$connection_id, t$conn_start,
t$req_type, t$start,
t$num_req, t$req_size,
t$num_resp, t$resp_size,
fmt("req_type %s resp_type %s raw %d",
t$req_type, t$resp_type, t$raw_ssn_msg));
delete netbios_ssn_trans_table[id];
}
function lookup_netbios_ssn_transaction(c: connection, new_trans: bool): netbios_ssn_transaction
{
local id = c$id;
if ( new_trans )
{
# End any previous trans
end_netbios_ssn_transaction(id);
}
if ( id !in netbios_ssn_trans_table )
{
local t = [
$connection_id = id,
$conn_start = c$start_time,
$start = network_time(),
$num_req = 0, $req_size = 0,
$num_resp = 0, $resp_size = 0,
$req_type = "none", $resp_type = "none",
$raw_ssn_msg = 0];
netbios_ssn_trans_table[c$id] = t;
}
return netbios_ssn_trans_table[c$id];
}
event netbios_ssn_message(c: connection, is_orig: bool, msg_type: count, data_len: count)
{
local msg_type_name = netbios_msg_types[msg_type];
local t: netbios_ssn_transaction;
if ( is_orig )
{
t = lookup_netbios_ssn_transaction(c, T);
++t$num_req;
if ( t$num_req == 1 )
t$req_type = msg_type_name;
t$req_size = t$req_size + data_len;
}
else
{
t = lookup_netbios_ssn_transaction(c, F);
++t$num_resp;
if ( t$num_resp == 1 )
t$resp_type = msg_type_name;
t$resp_size = t$resp_size + data_len;
}
}
event netbios_session_raw_message(c: connection, is_orig: bool, msg: string)
{
local t = lookup_netbios_ssn_transaction(c, F);
++t$raw_ssn_msg;
}
event connection_state_remove(c: connection)
{
if ( c$id in netbios_ssn_trans_table )
end_netbios_ssn_transaction(c$id);
}