mirror of
https://github.com/zeek/zeek.git
synced 2025-10-04 07:38:19 +00:00
Improve gap reporting in TCP connections that never see data.
The previous behavior was to accomodate SYN/FIN/RST-filtered traces by not reporting missing data (via the content_gap event) for such connections. The new behavior always reports gaps for connections that are established and terminate normally, but sequence numbers indicate that all data packets of the connection were missed. The behavior can be reverted by redef'ing "detect_filtered_trace".
This commit is contained in:
parent
5b3573394e
commit
9b12967d40
7 changed files with 29 additions and 1 deletions
|
@ -2849,6 +2849,12 @@ global load_sample_freq = 20 &redef;
|
||||||
## .. bro:see:: gap_report
|
## .. bro:see:: gap_report
|
||||||
const gap_report_freq = 1.0 sec &redef;
|
const gap_report_freq = 1.0 sec &redef;
|
||||||
|
|
||||||
|
## Whether to attempt to automatically detect SYN/FIN/RST-filtered trace
|
||||||
|
## and not report missing segments for such connections.
|
||||||
|
## If this is enabled, then missing data at the end of connections may not
|
||||||
|
## be reported via :bro:see:`content_gap`.
|
||||||
|
const detect_filtered_trace = F &redef;
|
||||||
|
|
||||||
## Whether we want :bro:see:`content_gap` and :bro:see:`gap_report` for partial
|
## Whether we want :bro:see:`content_gap` and :bro:see:`gap_report` for partial
|
||||||
## connections. A connection is partial if it is missing a full handshake. Note
|
## connections. A connection is partial if it is missing a full handshake. Note
|
||||||
## that gap reports for partial connections might not be reliable.
|
## that gap reports for partial connections might not be reliable.
|
||||||
|
|
|
@ -178,7 +178,7 @@ void TCP_Reassembler::Undelivered(int up_to_seq)
|
||||||
// to this method and only if this condition is not true).
|
// to this method and only if this condition is not true).
|
||||||
reporter->InternalError("Calling Undelivered for data that has already been delivered (or has already been marked as undelivered");
|
reporter->InternalError("Calling Undelivered for data that has already been delivered (or has already been marked as undelivered");
|
||||||
|
|
||||||
if ( last_reassem_seq == 1 &&
|
if ( BifConst::detect_filtered_trace && last_reassem_seq == 1 &&
|
||||||
(endpoint->FIN_cnt > 0 || endpoint->RST_cnt > 0 ||
|
(endpoint->FIN_cnt > 0 || endpoint->RST_cnt > 0 ||
|
||||||
peer->FIN_cnt > 0 || peer->RST_cnt > 0) )
|
peer->FIN_cnt > 0 || peer->RST_cnt > 0) )
|
||||||
{
|
{
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
const ignore_keep_alive_rexmit: bool;
|
const ignore_keep_alive_rexmit: bool;
|
||||||
const skip_http_data: bool;
|
const skip_http_data: bool;
|
||||||
const use_conn_size_analyzer: bool;
|
const use_conn_size_analyzer: bool;
|
||||||
|
const detect_filtered_trace: bool;
|
||||||
const report_gaps_for_partial: bool;
|
const report_gaps_for_partial: bool;
|
||||||
const exit_only_after_terminate: bool;
|
const exit_only_after_terminate: bool;
|
||||||
|
|
||||||
|
|
10
testing/btest/Baseline/core.tcp.miss-end-data/conn.log
Normal file
10
testing/btest/Baseline/core.tcp.miss-end-data/conn.log
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
#separator \x09
|
||||||
|
#set_separator ,
|
||||||
|
#empty_field (empty)
|
||||||
|
#unset_field -
|
||||||
|
#path conn
|
||||||
|
#open 2014-01-24-22-19-38
|
||||||
|
#fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p proto service duration orig_bytes resp_bytes conn_state local_orig missed_bytes history orig_pkts orig_ip_bytes resp_pkts resp_ip_bytes tunnel_parents
|
||||||
|
#types time string addr port addr port enum string interval count count string bool count string count count count count table[string]
|
||||||
|
1331764471.664131 CXWv6p3arKYeMETxOg 192.168.122.230 60648 77.238.160.184 80 tcp http 10.048360 538 2902 SF - 2902 ShADafF 5 750 4 172 (empty)
|
||||||
|
#close 2014-01-24-22-19-38
|
1
testing/btest/Baseline/core.tcp.miss-end-data/out
Normal file
1
testing/btest/Baseline/core.tcp.miss-end-data/out
Normal file
|
@ -0,0 +1 @@
|
||||||
|
content_gap, [orig_h=192.168.122.230, orig_p=60648/tcp, resp_h=77.238.160.184, resp_p=80/tcp], F, 1, 2902
|
BIN
testing/btest/Traces/tcp/miss_end_data.pcap
Normal file
BIN
testing/btest/Traces/tcp/miss_end_data.pcap
Normal file
Binary file not shown.
10
testing/btest/core/tcp/miss-end-data.bro
Normal file
10
testing/btest/core/tcp/miss-end-data.bro
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
# @TEST-EXEC: bro -r $TRACES/tcp/miss_end_data.pcap %INPUT >out
|
||||||
|
# @TEST-EXEC: btest-diff out
|
||||||
|
# @TEST-EXEC: btest-diff conn.log
|
||||||
|
|
||||||
|
redef report_gaps_for_partial = T;
|
||||||
|
|
||||||
|
event content_gap(c: connection, is_orig: bool, seq: count, length: count)
|
||||||
|
{
|
||||||
|
print "content_gap", c$id, is_orig, seq, length;
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue