mirror of
https://github.com/zeek/zeek.git
synced 2025-10-02 06:38:20 +00:00
Merge branch 'topic/jgras/dpd-late-match' of https://github.com/J-Gras/zeek
* 'topic/jgras/dpd-late-match' of https://github.com/J-Gras/zeek: Improve dpd_late_match event generation. Improve logging of speculative service. Update test-all-policy script. Add speculative service script. Allow to handle late DPD matches.
This commit is contained in:
commit
aeef4bf030
16 changed files with 186 additions and 2 deletions
13
CHANGES
13
CHANGES
|
@ -1,4 +1,17 @@
|
||||||
|
|
||||||
|
3.1.0-dev.124 | 2019-09-17 11:16:47 -0700
|
||||||
|
|
||||||
|
* Add speculative service script. (Jan Grashoefer)
|
||||||
|
|
||||||
|
The speculative service script handles dpd_late_match events to extend
|
||||||
|
conn.log with infos about potential protocol identifications.
|
||||||
|
|
||||||
|
* Allow to handle late DPD matches. (Jan Grashoefer)
|
||||||
|
|
||||||
|
If "dpd_match_only_beginning" is disabled, matches of protocol signatures
|
||||||
|
can be handeld using protocol_late_match. To prevent further matching in
|
||||||
|
this case, the new option "dpd_late_match_stop" may be activated.
|
||||||
|
|
||||||
3.1.0-dev.118 | 2019-09-17 17:21:58 +0000
|
3.1.0-dev.118 | 2019-09-17 17:21:58 +0000
|
||||||
|
|
||||||
* GH-566: Fix cases where ssh_encrypted_packet event wasn't raised.
|
* GH-566: Fix cases where ssh_encrypted_packet event wasn't raised.
|
||||||
|
|
10
NEWS
10
NEWS
|
@ -9,6 +9,16 @@ Zeek 3.1.0
|
||||||
New Functionality
|
New Functionality
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
- Add a new option, ``dpd_late_match_stop``, which can be used in conjuction
|
||||||
|
with the option ``dpd_match_only_beginning`` and the new event
|
||||||
|
``protocol_late_match`` to help annotate the conn.log with a field
|
||||||
|
to speculate on the protocol/service in cases where the DPD buffer
|
||||||
|
was already exhausted and can't analyze the full connection anymore,
|
||||||
|
but where there was still a late signature match. A new script,
|
||||||
|
``policy/protocols/conn/speculative-service.zeek``, was added as an
|
||||||
|
example of how to perform this tuning and add a "speculative_service"
|
||||||
|
field to conn.log, but it's not loaded by default.
|
||||||
|
|
||||||
Changed Functionality
|
Changed Functionality
|
||||||
---------------------
|
---------------------
|
||||||
|
|
||||||
|
|
2
VERSION
2
VERSION
|
@ -1 +1 @@
|
||||||
3.1.0-dev.118
|
3.1.0-dev.124
|
||||||
|
|
2
doc
2
doc
|
@ -1 +1 @@
|
||||||
Subproject commit a3dd09cd5acfe6aa848a84eae5fdb18d64d590e1
|
Subproject commit 218907b6500d627904f6ba0767f7ba362bf825f7
|
|
@ -4684,6 +4684,18 @@ const dpd_buffer_size = 1024 &redef;
|
||||||
## only signatures used for dynamic protocol detection.
|
## only signatures used for dynamic protocol detection.
|
||||||
const dpd_match_only_beginning = T &redef;
|
const dpd_match_only_beginning = T &redef;
|
||||||
|
|
||||||
|
## If true, stops signature matching after a late match. A late match may occur
|
||||||
|
## in case the DPD buffer is exhausted but a protocol signature matched. To
|
||||||
|
## allow late matching, :zeek:see:`dpd_match_only_beginning` must be disabled.
|
||||||
|
##
|
||||||
|
## .. zeek:see:: dpd_reassemble_first_packets dpd_buffer_size
|
||||||
|
## dpd_match_only_beginning
|
||||||
|
##
|
||||||
|
## .. note:: Despite the name, this option stops *all* signature matching, not
|
||||||
|
## only signatures used for dynamic protocol detection but is triggered by
|
||||||
|
## DPD signatures only.
|
||||||
|
const dpd_late_match_stop = F &redef;
|
||||||
|
|
||||||
## If true, don't consider any ports for deciding which protocol analyzer to
|
## If true, don't consider any ports for deciding which protocol analyzer to
|
||||||
## use.
|
## use.
|
||||||
##
|
##
|
||||||
|
|
36
scripts/policy/protocols/conn/speculative-service.zeek
Normal file
36
scripts/policy/protocols/conn/speculative-service.zeek
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
##! This script adds information about matched DPD signatures to the connection
|
||||||
|
##! log.
|
||||||
|
|
||||||
|
@load base/protocols/conn
|
||||||
|
|
||||||
|
module Conn;
|
||||||
|
|
||||||
|
redef record Info += {
|
||||||
|
## Protocol that was determined by a matching signature after the beginning
|
||||||
|
## of a connection. In this situation no analyzer can be attached and hence
|
||||||
|
## the data cannot be analyzed nor the protocol can be confirmed.
|
||||||
|
speculative_service: string &log &optional;
|
||||||
|
};
|
||||||
|
|
||||||
|
redef record connection += {
|
||||||
|
speculative_service: set[string] &default=string_set();
|
||||||
|
};
|
||||||
|
|
||||||
|
redef dpd_match_only_beginning = F;
|
||||||
|
redef dpd_late_match_stop = T;
|
||||||
|
|
||||||
|
event protocol_late_match(c: connection, atype: Analyzer::Tag)
|
||||||
|
{
|
||||||
|
local analyzer = Analyzer::name(atype);
|
||||||
|
add c$speculative_service[analyzer];
|
||||||
|
}
|
||||||
|
|
||||||
|
event connection_state_remove(c: connection)
|
||||||
|
{
|
||||||
|
local sp_service = "";
|
||||||
|
for ( s in c$speculative_service )
|
||||||
|
sp_service = sp_service == "" ? s : cat(sp_service, ",", s);
|
||||||
|
|
||||||
|
if ( sp_service != "" )
|
||||||
|
c$conn$speculative_service = to_lower(sp_service);
|
||||||
|
}
|
|
@ -67,6 +67,7 @@
|
||||||
@load protocols/conn/mac-logging.zeek
|
@load protocols/conn/mac-logging.zeek
|
||||||
@load protocols/conn/vlan-logging.zeek
|
@load protocols/conn/vlan-logging.zeek
|
||||||
@load protocols/conn/weirds.zeek
|
@load protocols/conn/weirds.zeek
|
||||||
|
#@load protocols/conn/speculative-service.zeek
|
||||||
@load protocols/dhcp/msg-orig.zeek
|
@load protocols/dhcp/msg-orig.zeek
|
||||||
@load protocols/dhcp/software.zeek
|
@load protocols/dhcp/software.zeek
|
||||||
@load protocols/dhcp/sub-opts.zeek
|
@load protocols/dhcp/sub-opts.zeek
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
@load frameworks/control/controller.zeek
|
@load frameworks/control/controller.zeek
|
||||||
@load frameworks/files/extract-all-files.zeek
|
@load frameworks/files/extract-all-files.zeek
|
||||||
@load policy/misc/dump-events.zeek
|
@load policy/misc/dump-events.zeek
|
||||||
|
@load policy/protocols/conn/speculative-service.zeek
|
||||||
|
|
||||||
@load ./example.zeek
|
@load ./example.zeek
|
||||||
|
|
||||||
|
|
|
@ -164,6 +164,7 @@ RecordType* irc_join_info;
|
||||||
int dpd_reassemble_first_packets;
|
int dpd_reassemble_first_packets;
|
||||||
int dpd_buffer_size;
|
int dpd_buffer_size;
|
||||||
int dpd_match_only_beginning;
|
int dpd_match_only_beginning;
|
||||||
|
int dpd_late_match_stop;
|
||||||
int dpd_ignore_ports;
|
int dpd_ignore_ports;
|
||||||
|
|
||||||
TableVal* likely_server_ports;
|
TableVal* likely_server_ports;
|
||||||
|
@ -406,6 +407,7 @@ void init_net_var()
|
||||||
opt_internal_int("dpd_reassemble_first_packets");
|
opt_internal_int("dpd_reassemble_first_packets");
|
||||||
dpd_buffer_size = opt_internal_int("dpd_buffer_size");
|
dpd_buffer_size = opt_internal_int("dpd_buffer_size");
|
||||||
dpd_match_only_beginning = opt_internal_int("dpd_match_only_beginning");
|
dpd_match_only_beginning = opt_internal_int("dpd_match_only_beginning");
|
||||||
|
dpd_late_match_stop = opt_internal_int("dpd_late_match_stop");
|
||||||
dpd_ignore_ports = opt_internal_int("dpd_ignore_ports");
|
dpd_ignore_ports = opt_internal_int("dpd_ignore_ports");
|
||||||
|
|
||||||
likely_server_ports = internal_val("likely_server_ports")->AsTableVal();
|
likely_server_ports = internal_val("likely_server_ports")->AsTableVal();
|
||||||
|
|
|
@ -165,6 +165,7 @@ extern RecordType* irc_join_info;
|
||||||
extern int dpd_reassemble_first_packets;
|
extern int dpd_reassemble_first_packets;
|
||||||
extern int dpd_buffer_size;
|
extern int dpd_buffer_size;
|
||||||
extern int dpd_match_only_beginning;
|
extern int dpd_match_only_beginning;
|
||||||
|
extern int dpd_late_match_stop;
|
||||||
extern int dpd_ignore_ports;
|
extern int dpd_ignore_ports;
|
||||||
|
|
||||||
extern TableVal* likely_server_ports;
|
extern TableVal* likely_server_ports;
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#include "PIA.h"
|
#include "PIA.h"
|
||||||
#include "RuleMatcher.h"
|
#include "RuleMatcher.h"
|
||||||
|
#include "Event.h"
|
||||||
#include "analyzer/protocol/tcp/TCP_Flags.h"
|
#include "analyzer/protocol/tcp/TCP_Flags.h"
|
||||||
#include "analyzer/protocol/tcp/TCP_Reassembler.h"
|
#include "analyzer/protocol/tcp/TCP_Reassembler.h"
|
||||||
|
|
||||||
|
@ -147,6 +148,20 @@ void PIA_UDP::ActivateAnalyzer(analyzer::Tag tag, const Rule* rule)
|
||||||
DBG_LOG(DBG_ANALYZER, "analyzer found but buffer already exceeded");
|
DBG_LOG(DBG_ANALYZER, "analyzer found but buffer already exceeded");
|
||||||
// FIXME: This is where to check whether an analyzer
|
// FIXME: This is where to check whether an analyzer
|
||||||
// supports partial connections once we get such.
|
// supports partial connections once we get such.
|
||||||
|
|
||||||
|
if ( protocol_late_match )
|
||||||
|
{
|
||||||
|
// Queue late match event
|
||||||
|
EnumVal *tval = tag ? tag.AsEnumVal() : GetAnalyzerTag().AsEnumVal();
|
||||||
|
Ref(tval);
|
||||||
|
|
||||||
|
mgr.QueueEventFast(protocol_late_match, {
|
||||||
|
BuildConnVal(),
|
||||||
|
tval,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
pkt_buffer.state = dpd_late_match_stop ? SKIPPING : MATCHING_ONLY;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -282,6 +297,20 @@ void PIA_TCP::ActivateAnalyzer(analyzer::Tag tag, const Rule* rule)
|
||||||
DBG_LOG(DBG_ANALYZER, "analyzer found but buffer already exceeded");
|
DBG_LOG(DBG_ANALYZER, "analyzer found but buffer already exceeded");
|
||||||
// FIXME: This is where to check whether an analyzer supports
|
// FIXME: This is where to check whether an analyzer supports
|
||||||
// partial connections once we get such.
|
// partial connections once we get such.
|
||||||
|
|
||||||
|
if ( protocol_late_match )
|
||||||
|
{
|
||||||
|
// Queue late match event
|
||||||
|
EnumVal *tval = tag ? tag.AsEnumVal() : GetAnalyzerTag().AsEnumVal();
|
||||||
|
Ref(tval);
|
||||||
|
|
||||||
|
mgr.QueueEventFast(protocol_late_match, {
|
||||||
|
BuildConnVal(),
|
||||||
|
tval
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
stream_buffer.state = dpd_late_match_stop ? SKIPPING : MATCHING_ONLY;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -369,6 +369,20 @@ event content_gap%(c: connection, is_orig: bool, seq: count, length: count%);
|
||||||
## there (and thus in ``conn.log``).
|
## there (and thus in ``conn.log``).
|
||||||
event protocol_confirmation%(c: connection, atype: Analyzer::Tag, aid: count%);
|
event protocol_confirmation%(c: connection, atype: Analyzer::Tag, aid: count%);
|
||||||
|
|
||||||
|
## Generated if a DPD signature matched but the DPD buffer is already exhausted
|
||||||
|
## and thus the analyzer could not be attached. While this does not confirm
|
||||||
|
## that a protocol is actually used, it allows to retain that information.
|
||||||
|
##
|
||||||
|
## c: The connection.
|
||||||
|
##
|
||||||
|
## atype: The type of the analyzer confirming that its protocol is in
|
||||||
|
## use. The value is one of the ``Analyzer::ANALYZER_*`` constants. For example,
|
||||||
|
## ``Analyzer::ANALYZER_HTTP`` means the HTTP analyzer determined that it's indeed
|
||||||
|
## parsing an HTTP connection.
|
||||||
|
##
|
||||||
|
## .. bro:see:: dpd_buffer_size
|
||||||
|
event protocol_late_match%(c: connection, atype: Analyzer::Tag%);
|
||||||
|
|
||||||
## Generated when a protocol analyzer determines that a connection it is parsing
|
## Generated when a protocol analyzer determines that a connection it is parsing
|
||||||
## is not conforming to the protocol it expects. Zeek's dynamic protocol
|
## is not conforming to the protocol it expects. Zeek's dynamic protocol
|
||||||
## detection heuristically activates analyzers as soon as it believes a
|
## detection heuristically activates analyzers as soon as it believes a
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
#separator \x09
|
||||||
|
#set_separator ,
|
||||||
|
#empty_field (empty)
|
||||||
|
#unset_field -
|
||||||
|
#path conn
|
||||||
|
#open 2019-08-30-13-12-19
|
||||||
|
#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 local_resp missed_bytes history orig_pkts orig_ip_bytes resp_pkts resp_ip_bytes tunnel_parents speculative_service
|
||||||
|
#types time string addr port addr port enum string interval count count string bool bool count string count count count count set[string] string
|
||||||
|
1567010592.624680 CHhAvVGS1DHFjwGM9 127.0.0.1 37526 127.0.0.1 80 tcp http 0.008395 61907 60478 SF - - 0 ShADadfF 10 62435 9 60954 - http
|
||||||
|
1567010639.143657 ClEkJM2Vm5giqnMf4h 127.0.0.1 60644 127.0.0.1 5000 tcp - 0.015853 61917 60478 SF - - 0 ShADadfF 10 62445 9 60954 - http
|
||||||
|
#close 2019-08-30-13-12-19
|
|
@ -0,0 +1,43 @@
|
||||||
|
#separator \x09
|
||||||
|
#set_separator ,
|
||||||
|
#empty_field (empty)
|
||||||
|
#unset_field -
|
||||||
|
#path conn
|
||||||
|
#open 2019-09-17-17-56-40
|
||||||
|
#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 local_resp missed_bytes history orig_pkts orig_ip_bytes resp_pkts resp_ip_bytes tunnel_parents speculative_service
|
||||||
|
#types time string addr port addr port enum string interval count count string bool bool count string count count count count set[string] string
|
||||||
|
1300475167.096535 CHhAvVGS1DHFjwGM9 141.142.220.202 5353 224.0.0.251 5353 udp dns - - - S0 - - 0 D 1 73 0 0 - -
|
||||||
|
1300475167.097012 ClEkJM2Vm5giqnMf4h fe80::217:f2ff:fed7:cf65 5353 ff02::fb 5353 udp dns - - - S0 - - 0 D 1 199 0 0 - -
|
||||||
|
1300475167.099816 C4J4Th3PJpwUYZZ6gc 141.142.220.50 5353 224.0.0.251 5353 udp dns - - - S0 - - 0 D 1 179 0 0 - -
|
||||||
|
1300475168.853899 CmES5u32sYpV7JYN 141.142.220.118 43927 141.142.2.2 53 udp dns 0.000435 38 89 SF - - 0 Dd 1 66 1 117 - -
|
||||||
|
1300475168.854378 CP5puj4I8PtEU4qzYg 141.142.220.118 37676 141.142.2.2 53 udp dns 0.000420 52 99 SF - - 0 Dd 1 80 1 127 - -
|
||||||
|
1300475168.854837 C37jN32gN3y3AZzyf6 141.142.220.118 40526 141.142.2.2 53 udp dns 0.000392 38 183 SF - - 0 Dd 1 66 1 211 - -
|
||||||
|
1300475168.857956 C0LAHyvtKSQHyJxIl 141.142.220.118 32902 141.142.2.2 53 udp dns 0.000317 38 89 SF - - 0 Dd 1 66 1 117 - -
|
||||||
|
1300475168.858306 CFLRIC3zaTU1loLGxh 141.142.220.118 59816 141.142.2.2 53 udp dns 0.000343 52 99 SF - - 0 Dd 1 80 1 127 - -
|
||||||
|
1300475168.858713 C9rXSW3KSpTYvPrlI1 141.142.220.118 59714 141.142.2.2 53 udp dns 0.000375 38 183 SF - - 0 Dd 1 66 1 211 - -
|
||||||
|
1300475168.891644 C9mvWx3ezztgzcexV7 141.142.220.118 58206 141.142.2.2 53 udp dns 0.000339 38 89 SF - - 0 Dd 1 66 1 117 - -
|
||||||
|
1300475168.892037 CNnMIj2QSd84NKf7U3 141.142.220.118 38911 141.142.2.2 53 udp dns 0.000335 52 99 SF - - 0 Dd 1 80 1 127 - -
|
||||||
|
1300475168.892414 C7fIlMZDuRiqjpYbb 141.142.220.118 59746 141.142.2.2 53 udp dns 0.000421 38 183 SF - - 0 Dd 1 66 1 211 - -
|
||||||
|
1300475168.893988 CpmdRlaUoJLN3uIRa 141.142.220.118 45000 141.142.2.2 53 udp dns 0.000384 38 89 SF - - 0 Dd 1 66 1 117 - -
|
||||||
|
1300475168.894422 C1Xkzz2MaGtLrc1Tla 141.142.220.118 48479 141.142.2.2 53 udp dns 0.000317 52 99 SF - - 0 Dd 1 80 1 127 - -
|
||||||
|
1300475168.894787 CqlVyW1YwZ15RhTBc4 141.142.220.118 48128 141.142.2.2 53 udp dns 0.000423 38 183 SF - - 0 Dd 1 66 1 211 - -
|
||||||
|
1300475168.901749 CBA8792iHmnhPLksKa 141.142.220.118 56056 141.142.2.2 53 udp dns 0.000402 36 131 SF - - 0 Dd 1 64 1 159 - -
|
||||||
|
1300475168.902195 CGLPPc35OzDQij1XX8 141.142.220.118 55092 141.142.2.2 53 udp dns 0.000374 36 198 SF - - 0 Dd 1 64 1 226 - -
|
||||||
|
1300475169.899438 Cipfzj1BEnhejw8cGf 141.142.220.44 5353 224.0.0.251 5353 udp dns - - - S0 - - 0 D 1 85 0 0 - -
|
||||||
|
1300475170.862384 CV5WJ42jPYbNW9JNWf 141.142.220.226 137 141.142.220.255 137 udp dns 2.613017 350 0 S0 - - 0 D 7 546 0 0 - -
|
||||||
|
1300475171.675372 CPhDKt12KQPUVbQz06 fe80::3074:17d5:2052:c324 65373 ff02::1:3 5355 udp dns 0.100096 66 0 S0 - - 0 D 2 162 0 0 - -
|
||||||
|
1300475171.677081 CAnFrb2Cvxr5T7quOc 141.142.220.226 55131 224.0.0.252 5355 udp dns 0.100021 66 0 S0 - - 0 D 2 122 0 0 - -
|
||||||
|
1300475173.116749 C8rquZ3DjgNW06JGLl fe80::3074:17d5:2052:c324 54213 ff02::1:3 5355 udp dns 0.099801 66 0 S0 - - 0 D 2 162 0 0 - -
|
||||||
|
1300475173.117362 CzrZOtXqhwwndQva3 141.142.220.226 55671 224.0.0.252 5355 udp dns 0.099849 66 0 S0 - - 0 D 2 122 0 0 - -
|
||||||
|
1300475173.153679 CaGCc13FffXe6RkQl9 141.142.220.238 56641 141.142.220.255 137 udp dns - - - S0 - - 0 D 1 78 0 0 - -
|
||||||
|
1300475168.652003 CtPZjS20MLrsMUOJi2 141.142.220.118 35634 208.80.152.2 80 tcp - 0.061329 463 350 OTH - - 0 DdA 2 567 1 402 - -
|
||||||
|
1300475168.902635 CiyBAq1bBLNaTiTAc 141.142.220.118 35642 208.80.152.2 80 tcp http 0.120041 534 412 S1 - - 0 ShADad 4 750 3 576 - -
|
||||||
|
1300475168.855305 C3eiCBGOLw3VtHfOj 141.142.220.118 49996 208.80.152.3 80 tcp http 0.218501 1171 733 S1 - - 0 ShADad 6 1491 4 949 - -
|
||||||
|
1300475168.855330 CwjjYJ2WqgTbAqiHl6 141.142.220.118 49997 208.80.152.3 80 tcp http 0.219720 1125 734 S1 - - 0 ShADad 6 1445 4 950 - -
|
||||||
|
1300475168.859163 Ck51lg1bScffFj34Ri 141.142.220.118 49998 208.80.152.3 80 tcp http 0.215893 1130 734 S1 - - 0 ShADad 6 1450 4 950 - -
|
||||||
|
1300475168.892913 CykQaM33ztNt0csB9a 141.142.220.118 49999 208.80.152.3 80 tcp http 0.220961 1137 733 S1 - - 0 ShADad 6 1457 4 949 - -
|
||||||
|
1300475168.892936 CtxTCR2Yer0FR1tIBg 141.142.220.118 50000 208.80.152.3 80 tcp http 0.229603 1148 734 S1 - - 0 ShADad 6 1468 4 950 - -
|
||||||
|
1300475168.895267 CLNN1k2QMum1aexUK7 141.142.220.118 50001 208.80.152.3 80 tcp http 0.227284 1178 734 S1 - - 0 ShADad 6 1498 4 950 - -
|
||||||
|
1300475168.724007 CUM0KZ3MLUfNB0cl11 141.142.220.118 48649 208.80.152.118 80 tcp http 0.119905 525 232 S1 - - 0 ShADad 4 741 3 396 - -
|
||||||
|
1300475169.780331 CFSwNi4CNGxcuffo49 141.142.220.235 6705 173.192.163.128 80 tcp - - - - OTH - - 0 ^h 0 0 1 48 - -
|
||||||
|
#close 2019-09-17-17-56-40
|
BIN
testing/btest/Traces/http/http-post-large.pcap
Normal file
BIN
testing/btest/Traces/http/http-post-large.pcap
Normal file
Binary file not shown.
|
@ -0,0 +1,11 @@
|
||||||
|
# A basic test of the speculative service detection
|
||||||
|
|
||||||
|
# @TEST-EXEC: zeek -C -r $TRACES/http/http-post-large.pcap %INPUT
|
||||||
|
# @TEST-EXEC: mv conn.log conn-post-large.log
|
||||||
|
# @TEST-EXEC: btest-diff conn-post-large.log
|
||||||
|
|
||||||
|
# @TEST-EXEC: zeek -C -r $TRACES/wikipedia.trace %INPUT
|
||||||
|
# @TEST-EXEC: mv conn.log conn-wiki.log
|
||||||
|
# @TEST-EXEC: btest-diff conn-wiki.log
|
||||||
|
|
||||||
|
@load protocols/conn/speculative-service
|
Loading…
Add table
Add a link
Reference in a new issue