[Bro] How information is stored in a set() and table() in bro
BortolameottiR
r.bortolameotti at utwente.nl
Fri Oct 27 07:33:01 PDT 2017
Hi everyone,
Some time ago I have dumped several log files using Bro. I had used the
script in the attachment. Essentially, during the event http_all_headers
I wanted to dump into the log the set of headers and values.
I would like to re-use this dataset I have collected, however this time
I would require the headers to be in the exact order as they are parsed.
This information is not in logs, so I was wondering whether it is
possible: given the script and the logs, to "reverse" the original order
of the headers.
For this purpose, I think I need to know: 1) how data is stored in a
"set [string]", because that's what I use to temporarily store the
values; and 2) how data is stored in "hlist: mime_header_list" which is
a table() in Bro.
Can anyone help me?
I already have a script that capture the headers in order with Bro, but
this would require me to re-capture the data for long period of time. If
I could reverse the process, it would save me quite some time.
Thanks in advance,
Riccardo
-------------- next part --------------
@load /opt/bro/share/bro/base/protocols/http
@load /opt/bro/share/bro/base/protocols/conn
redef record HTTP::Info += {
## Write in the log ALL header names and their values
header_values: set[string] &optional &log;
## Add the MAC address of origin of the connection
mac_orig: string &optional &log;
};
event bro_init()
{
local filter: Log::Filter = [$name="decanter_http", $path="decanter", $include=set("ts", "uid", "id.orig_h", "id.orig_p", "id.resp_h", "id.resp_p", "mac_orig", "method", "uri", "version", "request_body_len", "proxied", "orig_mime_types", "header_values")];
#filter$interv = 6 hr;
Log::add_filter(HTTP::LOG, filter);
Log::remove_filter(HTTP::LOG, "default");
Log::disable_stream(Conn::LOG);
Log::disable_stream(Files::LOG);
}
event http_all_headers (c: connection, is_orig: bool, hlist: mime_header_list)
{
if (c?$http && is_orig ==T)
{
local header_set : set[string] = set();
print hlist;
for (header in hlist)
{
print header;
local concatenate : string;
concatenate = hlist[header]$name + "||" + hlist[header]$value;
add header_set[concatenate];
}
c$http$header_values = header_set;
}
if (c$orig?$l2_addr)
{
c$http$mac_orig = c$orig$l2_addr;
}
}
More information about the Bro
mailing list