@load protocols/ssl/ssl-log-ext
redef Software::max_software_cache_size = 5000;
redef Software::parse_cache_interval = 1min;
redef Software::found_cache_interval = 5min;
@load protocols/ssl/ssl-log-ext
redef Software::max_software_cache_size = 5000;
redef Software::parse_cache_interval = 1min;
redef Software::found_cache_interval = 5min;
zeek -i udp::0.0.0.0:4789:vxlan
zeek -i udp::0.0.0.0:4789:vxlan policy/frameworks/conn_key/packet_source/udp/vxlan_vni
redef Log::json_string_escape_policy = JSON::STRING_ESCAPE_POLICY_TSV;
zeek -i udp::0.0.0.0:4789:vxlan
zeek -i udp::0.0.0.0:4789:vxlan policy/frameworks/conn_key/packet_source/udp/vxlan_vni
redef Log::json_string_escape_policy = JSON::STRING_ESCAPE_POLICY_TSV;
global endpoints: set[addr, addr] &write_expire=5min &publish_on_change=[
changes=set(TABLE_ELEMENT_NEW),
];
zeek -e 'print to_json(Cluster::Backend::ZeroMQ::generate_keypair())' | jq
# In a local.zeek or site script:
redef HTTP::ports += { 8181/tcp };
# In zeekctl.cfg:
MetricsAddr = 192.168.1.10
@load frameworks/conn_key/vlan_fivetuple
redef SMTP::enable_rfc822_msg_file_analysis = T;
event file_over_new_connection(f: fa_file, c: connection, is_orig: bool) {
if ( f$id == c$smtp$rfc822_msg_fuid )
Files::add_analyzer(f, Files::ANALYZER_EXTRACT, [$extract_filename="email"]);
}
ClusterBackend = ZeroMQ
UseWebSocket = 1
redef Log::max_log_record_size = 1000000;
zeek -r <capture.pcap> Log::max_log_record_size=1000000
zeek -C -r trace.pcap @load protocols/conn/failed-service-logging
echo 'redef Analyzer::disabled_analyzers += { Analyzer::ANALYZER_POSTGRESQL };' >> local.zeek
@load frameworks/cluster/backend/zeromq/connect
# Or, to keep Broker but tune backpressure:
redef Broker::peer_buffer_size = 4096;
redef Broker::peer_overflow_policy = "drop_oldest";
global v = vector(1, 2, 3);
delete v;
@if ( can_load("my-package") )
@load my-package
@endif
event connection_established(c: connection):
{
local aid = lookup_connection_analyzer_id(c$id, Analyzer::ANALYZER_HTTP);
if ( aid > 0 )
disable_analyzer(c$id, aid, T, T);
}
filter::remove_exclude('my_exclude_rule')
./configure --localversion='custom-build-1'
PacketFilter::remove_exclude("my_filter_name")
./configure --localversion="-internal-build-123"
redef Analyzer::disabled_analyzers += {
Analyzer::ANALYZER_LDAP_UDP,
Analyzer::ANALYZER_LDAP_TCP,
};
assert (input_field > 0, "Input field must be positive");
redef HTTP::max_pending_requests = 50;
# Add to your local.zeek or site policy
option default_limit_includes_missing = T;
# Add to your local.zeek or site policy
const SMB::max_dce_rpc_analyzers = 5; &redef;
event connection_flipped(c: connection) {
# Update custom state here
}
zeek ./hello.js
local t = current_event_time(); print t;
type A: record { a: addr; }; local p = from_json('{"a": "192.168.0.1"}', A); if ( p$valid ) print (p$v as A);
@load protocols/conn/community-id-logging
@pragma push ignore-deprecations
@load standard/init.zeek
@pragma pop
@load frameworks/pcap/pcap.zeek
global Pcap::non_fd_timeout = 50us;
Analyzer::enable_analyzer(chan, Analyzer::ANALYZER_SSL);
disable_module_events('FTP');
redef Broker::SQLite::synchronous = 'normal';
redef Broker::SQLite::journal_mode = 'wal';
local ips: set[addr] &ordered = { 10.0.0.1, 10.0.0.2 };
@load policy/frameworks/telemetry/log
hook disabling_analyzer(c: connection) {
if (c$id$resp_p == 443) break;
}
local vec = vector(1, 2, 3);
for ( idx, value in vec )
print sprintf('Index: %d, Value: %d', idx, value);
zeek --profile-scripts=profile.tsv script.zeek
Broker::listen_websocket()
./configure --statedir=/custom/state/dir
zeek -c capture.pcap --capture-unprocessed example.zeek
redef LogAscii::json_include_unset_fields = T;
zeek -u script.zeek
export ZKG_CONFIG_FILE=/etc/custom-zkg/config && zkg install zeek/zeek-aux
cat <<EOF > load-unknowns.zeek
@load policy/misc/unknown-protocols
EOF
zeek load-unknowns.zeek your_capture.pcap
global t: table[string] of count &backend=Broker::MEMORY;
./configure --enable-rocksdb --with-rocksdb=/usr/local/rocksdb
zeek -j <path_to_supervisor_script>
redef Config::config_files += { "/etc/zeek/options.dat" };
event bro_init() { Option::set_change_handler("my_opt", my_handler); } function my_handler(id: string, val: bool): bool { print fmt("%s changed to %s", id, val); return val; }
Summary
Zeek is an open-source network security monitor that inspects live or recorded traffic and turns it into detailed, protocol-level logs rather than raw packet dumps. It runs self-hosted, typically as a sensor or cluster of sensors watching a network tap or span port, and its domain-specific scripting language lets a site encode its own detection logic rather than relying on fixed signatures. That makes it a fit for SOCSOCA security operations center, the team or function that monitors threats, investigates alerts and coordinates incident response. Its work can be internal, outsourced or shared. analysts and network security teams doing traffic analysis and network security monitoring rather than endpoint-focused defenders. It sits in the network-analysis space alongside traditional IDSIDSAn intrusion detection system, monitoring traffic or host activity for suspicious behavior and producing alerts. Detection alone does not necessarily block the activity. tools, but its emphasis on stateful, scriptable protocol logging sets it apart from signature-only systems. Development is active, with over 300 contributors, thousands of commits in the past year, and a release cut 42 days ago.
Zeek is a network security monitor and framework for network traffic analysis and security monitoring.
Which hosts on my network talked to which, and using what protocols, over the last week?
inspects the reassembled application-layer traffic and writes structured, per-protocol log entries for every connection observed, so a site can reconstruct activity without replaying raw packets
Is a host on my network doing something my existing signatures wouldn't catch?
lets a site write its own detection logic in a domain-specific scripting language against the full stream of parsed protocol events, rather than matching only against fixed signatures
Which DNS notification requests hit my resolvers, and from where?
records DNS traffic including RFC 1996 notification messages with their opcode in the DNS log, so notify traffic is distinguishable from ordinary queries
Did a crafted email or web request try to exhaust memory with an oversized header?
caps MIME header size against a configurable limit and reports a weird event when a message exceeds it, halting further processing of that packet
What Redis commands and replies crossed my network?
runs a built-in Redis protocol analyzer enabled by default that logs commands and replies to a dedicated log
54 capabilities
across 7 capability groups
· 1 backed by code, an API document or a real run
Built from Zeek's releases, docs, README and our own runs.
“Seen” marks the month we first spotted a release the vendor didn't date.
Group names and tags are our labels.
+Packet analysis plugin frameworkshippedAllows writing plugins to parse packet headers below the session analysis layer, enabling chained parsing of individual packet parts and logging of unsupported protocols.34 releases · 3 other sources · first seen Dec 2020▸
Shared capability: Network traffic analysis
Also counts toward: Plugin API support, Plugin system
release
34 total
Adds policy/files/zip/register.zeek to map the bundled Spicy ZIP file analyzer to the application/zip MIME type; recursive ZIP depth is controlled by Spicy::max_file_depth.
v9.0.0 · Aug 2026
· source
· release history
Makes OpaqueType non-final and adds hooks for hashing, casting, and default initialization, enabling plugins to introduce new scripting types storable in sets/tables and castable to existing Zeek types (experimental).
v9.0.0 · Aug 2026
· source
· release history
Adds new HookPublishEvent() plugin hook for intercepting, monitoring, modifying, or rerouting published cluster events.
v8.0.0 · Aug 2025
· source
· release history
Adds PacketAnalyzer::Geneve::get_options() builtin to extract Geneve tunnel options from the current packet in scripts.
v7.2.0 · Apr 2025
· source
· release history
A protocol analyzer that raises a violation before confirmation is now immediately disabled; DPD::max_violations is no longer used (deprecated until Zeek 8.1).
v7.2.0 · Apr 2025
· source
· release history
Extends the unknown_protocols() event and unknown_protocol.log to include the names of all packet analyzers used for processing.
v7.1.0 · Dec 2024
· source
· release history
example
Enable a packet analyzer at runtime for targeted investigation without restarting Zeek.$ Analyzer::enable_analyzer(chan, Analyzer::ANALYZER_SSL);
v5.2.0 · Feb 2023
· source
Capture and dump packets that were not processed by any analyzer for debugging.$ zeek -c capture.pcap --capture-unprocessed example.zeek
v4.2.0 · Jan 2022
· source
Enable logging for protocols not natively supported by Zeek using the new packet analysis framework.$ cat <<EOF > load-unknowns.zeek @load policy/misc/unknown-protocols EOF zeek load-unknowns.zeek your_capture.pcap
v4.0.0 · Dec 2020
· source
+TLS/SSL protocol analysisshippedParses TLS and SSL traffic, exposing events for handshake details, key exchange parameters, OCSP, and certificate transparency data.25 releases · 1 other source · first seen Jul 2019▸
Shared capability: Network traffic analysis
release
25 total
Adds a new ssl_extension_encrypted_client_hello event in the TLS analyzer to report on Encrypted Client Hello (ECH).
announced · Sep 2026
· source
· release history
Adds ech_kdf_id and ech_aead_id fields to ssl.log (via the protocols/ssl/ssl-log-ext.zeek policy script) reporting HPKE KDF and AEAD identifiers from the TLS 1.3 ECH extension.
announced · Sep 2026
· source
· release history
Adds ssl_extension_signature_algorithms_cert event raised for the TLS signature_algorithms_cert extension.
v9.0.0 · Aug 2026
· source
· release history
Adds ssl_extension_encrypted_client_hello event carrying information about the TLS encrypted_client_hello extension.
v9.0.0 · Aug 2026
· source
· release history
Adds ssl_extension_signature_algorithms_cert event for accessing signature algorithms in TLS certificates via the signature_algorithms_cert extension
v9.0.0 · Aug 2026
· source
· release history
X.509 parsing now supports additional key types (e.g. ML-DSA) for certificate key length and key_type fields.
v8.2.0 · May 2026
· source
· release history
example
Enable ECH extension logging in ssl.log to capture HPKE KDF and AEAD identifiers from TLS 1.3 Encrypted Client Hello handshakes.$ @load protocols/ssl/ssl-log-ext
announced · Sep 2026
· source
+HTTP protocol analysisshippedParses HTTP traffic and exposes events including connection upgrades and policy hooks for HTTP inspection.14 releases · 3 other sources · first seen Jul 2019▸
Shared capability: Network traffic analysis
release
14 total
Extends the HTTP analyzer with nine new weirds — HTTP_bad_chunk_size, HTTP_chunked_multi, HTTP_content_length_0_and_expect_100_cont, HTTP_content_length_leading_zeros, HTTP_bad_content_length, HTTP_obsolete_line_folding, HTTP_content_length_and_chunked, HTTP_content_range_and_chunked, and…
v9.0.0 · Aug 2026
· source
· release history
Adds new weirds for HTTP Content-Range violations including HTTP_content_range_cannot_parse, HTTP_non_positive_content_range, and HTTP_content_range_invalid_instance.
v8.0.9 · Jul 2026
· source
· release history
Adds new weirds for Content-Length, Transfer-Encoding, and Expect header violations in the HTTP analyzer.
v8.2.1 · Jul 2026
· source
· release history
Adds MIME::max_header_bytes script variable to cap the maximum size of a MIME header, limiting memory exhaustion from crafted SMTP or HTTP packets.
v8.0.8 · May 2026
· source
· release history
Adds exceeded_mime_max_header_bytes weird reported when a MIME header exceeds the configured byte limit, halting further processing of that packet.
v8.0.8 · May 2026
· source
· release history
Well-known ports for built-in analyzers are now configurable via redef, e.g. redef HTTP::ports += { 8181/tcp }.
v8.2.0 · May 2026
· source
· release history
example
Add a non-standard port to the HTTP analyzer so Zeek detects HTTP on port 8181 without recompiling.$ # In a local.zeek or site script: redef HTTP::ports += { 8181/tcp };
v8.2.0 · May 2026
· source
Disable an HTTP analyzer for a specific connection at establishment time using its numeric identifier.$ event connection_established(c: connection): { local aid = lookup_connection_analyzer_id(c$id, Analyzer::ANALYZER_HTTP); if ( aid > 0 ) disable_analyzer(c$id, aid, T, T); }
v7.0.0 · Jul 2024
· source
Prevent unbounded state growth in HTTP requests by lowering the pending limit.$ redef HTTP::max_pending_requests = 50;
v6.1.0 · Oct 2023
· source
+DNS protocol analysisshippedParses DNS traffic with configurable resolver support and structured state tracking for queries and replies.14 releases · first seen Sep 2019▸
Shared capability: Network traffic analysis
release
14 total
Adds opcode and opcode_name fields to dns.log to support DNS notifications (RFC 1996); removable via the protocols/dns/disable-opcode-log-fields.zeek policy script.
announced · Sep 2026
· source
· release history
Logs multicast DNS transactions as separate transactions since they occur on separate network flows.
announced · Sep 2026
· source
· release history
The dns.log now records DNS notifications (RFC 1996) with opcode 4 and opcode_codenotify.
v8.2.0 · May 2026
· source
· release history
Adds a warning when scripts declare DNS events that are suppressed by dns_skip_all_addl being set to true.
v7.2.0 · Apr 2025
· source
· release history
Adds DNS::skip_resp_host_port_pairs option to detect-external-names.zeek; the script now also logs IPv6 results.
v7.2.0 · Apr 2025
· source
· release history
Adds support for TKEY resource records (RFC 2390) to the DNS analyzer, with a new dns_TKEY event.
v7.1.0 · Dec 2024
· source
· release history
+PCAP analysis into connection and protocol logsshippedReads a pcap file and produces structured logs covering connections and protocol activity.11 releases · 3 other sources · first seen Feb 2020▸
Shared capability: Network traffic analysis
release
11 total
Adds policy/protocols/conn/multicast-participants.zeek producing a new multicast_participants.log with IGMP-derived data about hosts participating in multicast connections.
v9.0.0 · Aug 2026
· source
· release history
Enables --save-seeds to put Zeek into deterministic mode, producing identical UIDs on a subsequent --load-seeds run.
v7.2.0 · Apr 2025
· source
· release history
Sets offline PCAP read buffer size to 128kb, configurable via Pcap::bufsize_offline_bytes.
v6.1.0 · Oct 2023
· source
· release history
Adds default_limit_includes_missing option to customize file size limit behavior when encountering large amounts of missed bytes
v6.0.1 · Sep 2023
· source
· release history
Adds disabling_analyzer() hook to allow vetoing analyzer disabling decisions in scripts
v5.1.0 · Sep 2022
· source
· release history
Adds max_changes_per_connection option to limit tunnel_changed events and prevent log spam (default 5)
v5.1.0 · Sep 2022
· source
· release history
example
Tighten memory usage for file extraction on packets with missing bytes$ # Add to your local.zeek or site policy option default_limit_includes_missing = T;
v6.0.1 · Sep 2023
· source
Veto analyzer disabling attempts for specific connections based on custom logic.$ hook disabling_analyzer(c: connection) { if (c$id$resp_p == 443) break; }
v5.1.0 · Sep 2022
· source
Analyze a pcap into connection / protocol logs$ zeek -r traffic.pcap
+Configurable protocol analyzer limitsshippedProvides script constants and configuration knobs to control maximum sizes, parsing depths, and resource limits across various protocol analyzers, including built-in thresholds for evasion detection.10 releases · first seen Jul 2026▸
Shared capability: Network traffic analysis
Also counts toward: Scripting API
release
10 total
Adds Finger::max_line_length script constant to limit input line size in the Spicy Finger analyzer.
v8.0.9 · Jul 2026
· source
· release history
Adds Gnutella::max_line_length and Gnutella::max_header_length script constants to limit data size in the Gnutella analyzer.
v8.2.1 · Jul 2026
· source
· release history
Adds TCP_scale_range weird for TCP window scale limits exceeding RFC7323.
v8.0.9 · Jul 2026
· source
· release history
Adds Finger::max_line_length script constant to control maximum line length in the Finger analyzer.
v8.2.1 · Jul 2026
· source
· release history
Adds five new weirds for ICMPv6 packet parsing evasion cases.
v8.2.1 · Jul 2026
· source
· release history
Adds rpc_max_pending_calls script constant and rpc_discarded_pending_calls event to control pending calls in the RDP analyzer.
v8.0.9 · Jul 2026
· source
· release history
+Kerberos protocol analysisshippedParses Kerberos traffic and supports ticket decryption using a keytab file via the script framework.9 releases · first seen Jul 2019▸
Shared capability: Network traffic analysis
release
9 total
Adds auth_ticket_sha256 and new_ticket_sha256 fields to kerberos.log (via protocols/krb/ticket-logging.zeek) replacing MD5-hashed fields with SHA256; the protocols/krb/md5-ticket-logging.zeek policy script restores the original fields.
announced · Sep 2026
· source
· release history
The auth_ticket and new_ticket fields (MD5 hashes) in kerberos.log are replaced by auth_ticket_sha256 and new_ticket_sha256 (SHA256) via protocols/krb/ticket-logging.zeek; load protocols/krb/md5-ticket-logging.zeek to restore the original fields.
announced · Sep 2026
· source
· release history
Extends the LDAP analyzer to forward SASL payloads from bindRequest/bindResponse to GSSAPI and NTLM parsers, enriching ntlm.log and kerberos.log.
v9.0.0 · Aug 2026
· source
· release history
Extends krb_ap_request() event with an in_kdc_padata parameter to indicate whether the AP-REQ is embedded in KDC/TGS pre-authentication data.
v9.0.0 · Aug 2026
· source
· release history
Extends kerberos.log AP entries to populate the service and cipher columns, which were previously unset.
v9.0.0 · Aug 2026
· source
· release history
Adds a new enc_part field to KRB_Response (passed in krb_as_response), exposing the cipher and encrypted session data from Kerberos AS responses.
v7.2.0 · Apr 2025
· source
· release history
+SSH protocol analysisshippedParses SSH traffic and exposes protocol events covering key exchange methods including ECC, Diffie-Hellman group exchange, GSS-API, and RSA secret.6 releases · first seen Aug 2021▸
Shared capability: Network traffic analysis
release
The host_key field in ssh.log is replaced by host_key_fingerprint (SHA256, ssh-keygen -l format); any pipeline keying on host_key will break unless the protocols/ssh/md5-host-key-logging.zeek policy script is loaded to restore it.
announced · Sep 2026
· source
· release history
Replaces the host_key fingerprint field in ssh.log with a new host_key_fingerprint field using SHA256 in the same format as ssh-keygen -l; the protocols/ssh/md5-host-key-logging.zeek policy script restores the old field.
announced · Sep 2026
· source
· release history
Adds SSH::max_packet_length and SSH::max_string_length script constants to control maximum packet and string sizes in the SSH analyzer.
v8.2.1 · Jul 2026
· source
· release history
Extends SSH analyzer with new events: ssh2_ecc_init, ssh2_gh_gex_init, ssh2_gss_init, ssh2_rsa_secret
v5.2.0 · Feb 2023
· source
· release history
ssh.logversion field is now optional, suppressing output when client/server versions cannot be determined
v4.0.3 · Aug 2021
· source
· release history
ssh.log schema change: the version field is no longer guaranteed to be present; scripts must handle the case where it is unset/missing
v4.0.3 · Aug 2021
· source
· release history
+IGMP protocol analysisshippedParses IGMP traffic, exposes events for each IGMP message type, and optionally produces a multicast participants log derived from IGMP data.4 releases · first seen May 2026▸
Shared capability: Network traffic analysis
release
Adds a new multicast_participants.log (via the protocols/conn/multicast-participants.zeek policy script) reporting multicast speakers based on IGMP activity.
announced · Sep 2026
· source
· release history
Adds policy/protocols/conn/multicast-participants.zeek producing a new multicast_participants.log with IGMP-derived data about hosts participating in multicast connections.
v9.0.0 · Aug 2026
· source
· release history
Adds multicast_participants.log output via the new policy script policy/protocols/conn/multicast-participants.zeek to track participating hosts from IGMP for multicast connections
v9.0.0 · Aug 2026
· source
· release history
New IGMP analyzer adds events for each IGMP message type.
v8.2.0 · May 2026
· source
· release history
+UDP packet source ingestionshippedReceives VXLAN or GENEVE mirror traffic over UDP without raw packet capture, using SO_REUSEPORT for multi-worker load balancing on Linux.4 releases · first seen Aug 2026▸
Shared capability: Network traffic analysis
Also counts toward: Command-line interface
release
Ships a new packet source enabling Zeek clusters to act as a UDP server that ingests encapsulated packet streams directly for cloud environments, without packet-sniffing workarounds.
announced · Sep 2026
· source
· release history
Adds zeek -i udp::0.0.0.0:4789:vxlan UDP packet source (bundled zeek-packet-source-udp plugin) to receive VXLAN or GENEVE mirror traffic over UDP without raw packet capture; uses SO_REUSEPORT for multi-worker kernel load-balancing.︀︄︇︀︅︉︀︅︀︀︃︀︀︅︅︀︅︊︀︄︆︀︃︄︀︄︇︀︅︉︀︅︀︀︃︀︀︅︅︀︅︊︀︄︆︀︃︄
v9.0.0 · Aug 2026
· source
· release history
Adds zeek -i udp::0.0.0.0:4789:vxlan support for processing UDP-based VXLAN or GENEVE mirror traffic directly via a new zeek-packet-source-udp plugin enabled by default on Linux
v9.0.0 · Aug 2026
· source
· release history
Adds zeek -i udp::0.0.0.0:4789:vxlan UDP packet source (bundled zeek-packet-source-udp plugin) to receive VXLAN or GENEVE mirror traffic over UDP without raw packet capture; uses SO_REUSEPORT for multi-worker kernel load-balancing.︀︄︇︀︅︉︀︅︀︀︃︀︀︅︅︀︅︊︀︄︆︀︃︄
v9.0.0 · Aug 2026
· source
· release history
+QUIC protocol analysisshippedParses QUIC version 1 traffic by decrypting INITIAL packets and forwarding handshake data to the SSL analyzer.3 releases · 1 other source · first seen Oct 2023▸
Shared capability: Network traffic analysis
release
Adds DPD signatures for QUIC version 1 and QUIC version 2 to attach the QUIC analyzer on non-port-443 UDP connections on signature match.
v9.0.0 · Aug 2026
· source
· release history
Adds QUIC::discarded_packet event for packets with fixed_bit 0, controllable via QUIC::max_discarded_packet_events
v8.1.0 · Dec 2025
· source
· release history
Adds the QUIC protocol analyzer for decrypting INITIAL packets of QUIC version 1, forwarding handshake data to SSL.
v6.1.0 · Oct 2023
· source
· release history
example
Monitor QUIC connections that are being dropped due to protocol violations.$ cat <<'EOF' | zeek -C event QUIC::discarded_packet(c: connection) { print fmt("Discarded packet in %s", c$id$orig_h); } @load base EOF
v8.1.0 · Dec 2025
· source
+FTP protocol analysisshippedParses FTP traffic and logs activity to ftp.log, including configurable password capture behaviour.3 releases · first seen Dec 2024▸
Shared capability: Network traffic analysis
release
Logs FTP sessions that feature only login and logout.
announced · Sep 2026
· source
· release history
Adds explicit TLS support (AUTH TLS) to the FTP analyzer.
v8.0.0 · Aug 2025
· source
· release history
FTP PASS command logging in ftp.log now honors FTP::default_capture_password, blanking passwords with <hidden>.
v7.1.0 · Dec 2024
· source
· release history
+NTP protocol analysisshippedParses NTP traffic and produces structured logs including ntp_control.log and ntp_private.log for NTP modes 6 and 7 in addition to standard NTP modes.3 releases · first seen Aug 2026▸
Shared capability: Network traffic analysis
release
Adds new ntp_control and ntp_private logs for NTP modes 6 and 7 respectively.
announced · Sep 2026
· source
· release history
Adds ntp_control.log and ntp_private.log outputs for NTP modes 6 and 7 respectively, expanding logging beyond the previous limit of modes 5 and under
v9.0.0 · Aug 2026
· source
· release history
Adds two new NTP logs — ntp_control.log and ntp_private.log — covering NTP modes 6 and 7, which were previously unlogged.
v9.0.0 · Aug 2026
· source
· release history
+MQTT and NTP protocol analysisshippedParses MQTT v3.1 and v3.1.1 traffic and produces protocol logs when the policy script is loaded.3 releases · first seen Sep 2019▸
previously: MQTT protocol analysis
Shared capability: Network traffic analysis
release
Adds ntp_control.log and ntp_private.log outputs for NTP modes 6 and 7 respectively, expanding logging beyond the previous limit of modes 5 and under
v9.0.0 · Aug 2026
· source
· release history
Adds two new NTP logs — ntp_control.log and ntp_private.log — covering NTP modes 6 and 7, which were previously unlogged.
v9.0.0 · Aug 2026
· source
· release history
@load policy/protocols/mqtt to enable MQTT v3.1/v3.1.1 protocol analysis and logging.
v3.0.0 · Sep 2019
· source
· release history
+MySQL protocol analysisshippedParses MySQL traffic, detects SSL-encrypted sessions, and exposes protocol events including a replacement for the removed mysql_ok event.3 releases · first seen Feb 2023▸
Shared capability: Network traffic analysis
release
Adds a mysql_user_change() event to the MySQL analyzer when a user changes mid-session via COM_USER_CHANGE.
v7.1.0 · Dec 2024
· source
· release history
The mysql_ok event is no longer raised; users must switch to the new mysql_eof event
v5.2.0 · Feb 2023
· source
· release history
MySQL analyzer detects SSL encrypted sessions, adding ssl to service field in conn.log
v5.2.0 · Feb 2023
· source
· release history
+PostgreSQL protocol analysisshippedParses PostgreSQL traffic and produces a postgresql.log with associated protocol events.1 release · 1 other source · first seen Dec 2024▸
Shared capability: Network traffic analysis
release
Adds a PostgreSQL protocol analyzer enabled by default, generating postgresql.log with associated events.
v7.1.0 · Dec 2024
· source
· release history
example
Disable the new PostgreSQL analyzer if it causes high CPU in environments with heavy PostgreSQL traffic until it stabilizes.$ echo 'redef Analyzer::disabled_analyzers += { Analyzer::ANALYZER_POSTGRESQL };' >> local.zeek
v7.1.0 · Dec 2024
· source
+WebSocket protocol analysisshippedParses WebSocket traffic and produces a websocket.log with an associated analyzer identifier.1 release · 1 other source · first seen Feb 2024▸
Shared capability: Network traffic analysis
release
Adds the websocket.log and new Analyzer::ANALYZER_WEBSOCKET to detect and analyze WebSocket traffic
v6.2.0 · Feb 2024
· source
· release history
example
Disable the new WebSocket analyzer if it causes unexpected resource usage.$ redef Analyzer::disabled_analyzers += { Analyzer::ANALYZER_WEBSOCKET };
v6.2.0 · Feb 2024
· source
+DCE-RPC protocol analysisshippedParses DCE-RPC traffic and exposes protocol events including script-level access to security provider, per-message protection, and authentication context in PDUs.1 release · first seen Aug 2026▸
Shared capability: Network traffic analysis
Also counts toward: Scripting language support
release
Adds dce_rpc_auth() event for script-level access to the security provider, per-message protection, and authentication context in DCE-RPC PDUs.
v9.0.0 · Aug 2026
· source
· release history
+SMTP protocol analysisshippedParses SMTP traffic including RFC 822 message bodies and forwards gap information to file analysis.1 release · first seen May 2026▸
Shared capability: Network traffic analysis
release
SMTP analyzer now forwards the first gap encountered during RFC 822 message analysis to the file object, enabling gap detection via missing_bytes in files.log.
v8.2.0 · May 2026
· source
· release history
+Redis protocol analysisshippedParses Redis traffic and logs commands and replies to redis.log.1 release · first seen Aug 2025▸
Shared capability: Network traffic analysis
release
Adds Redis protocol analyzer (from spicy-redis) enabled by default, logging commands and replies to redis.log.
v8.0.0 · Aug 2025
· source
· release history
+SMB protocol analysisshippedParses SMB1 and SMB2/3 traffic, exposing protocol events and structured logging for SMB activity.9 releases · 1 other source · first seen Jul 2019▸
SMTP analyzer now forwards the first gap encountered during RFC 822 message analysis to the file object, enabling gap detection via missing_bytes in files.log.
v8.2.0 · May 2026
· source
· release history
SMB2 packets containing multiple PDUs now correctly parse all headers.
v7.0.0 · Jul 2024
· source
· release history
Adds SMB::max_dce_rpc_analyzers script variable to control the number of DCE-RPC analyzers per SMB connection
v6.0.1 · Sep 2023
· source
· release history
Extends NTLM analyzer to parse challenge and response fields
v5.2.0 · Feb 2023
· source
· release history
Introduces a new smb_tree_connect_andx_response_without_tree weird event for SMB1 packets missing an associated request.
v5.0.6 · Feb 2023
· source
· release history
Introduces a new weird event smb_tree_connect_andx_response_without_tree when receiving SMB1 packets with connect_andx_response without an associated request
v5.1.2 · Feb 2023
· source
· release history
example
Limit DCE-RPC analyzer proliferation in high-SMB environments$ # Add to your local.zeek or site policy const SMB::max_dce_rpc_analyzers = 5; &redef;
v6.0.1 · Sep 2023
· source
+LDAP protocol analysisshippedParses LDAP traffic over both TCP and UDP, producing structured logs to ldap.log and ldap_search.log.8 releases · 1 other source · first seen Oct 2023▸
Extends the LDAP analyzer to forward SASL payloads to GSSAPI and NTLM parsers, enhancing logging into ntlm.log and kerberos.log.
announced · Sep 2026
· source
· release history
Adds StartTLS support to the LDAP analyzer, enabling SSL inspection for connections negotiated via extended request/response.
v7.1.0 · Dec 2024
· source
· release history
Extends the LDAP analyzer to handle non-sealed GSS-API WRAP tokens.
v7.1.0 · Dec 2024
· source
· release history
Supports handling of non-sealed GSS-API WRAP tokens in the LDAP analyzer.
v7.0.1 · Sep 2024
· source
· release history
Adds StartTLS support to the LDAP analyzer, enabling the SSL analyzer for connections that negotiate TLS via the extended request/response mechanism.
v7.0.1 · Sep 2024
· source
· release history
The arguments, diagnostic_messages, objects, opcodes, and results fields in ldap.log are renamed to their singular forms (argument, diagnostic_message, object, opcode, result) and changed from vectors/sets to scalars
v6.2.0 · Feb 2024
· source
· release history
example
Disable the new default LDAP analyzer if high CPU consumption occurs.$ redef Analyzer::disabled_analyzers += { Analyzer::ANALYZER_LDAP_UDP, Analyzer::ANALYZER_LDAP_TCP, };
v6.1.0 · Oct 2023
· source
+NTLM protocol analysisshippedParses NTLM traffic including challenge and response fields.3 releases · first seen Feb 2023▸
Extends the LDAP analyzer to forward SASL payloads to GSSAPI and NTLM parsers, enhancing logging into ntlm.log and kerberos.log.
announced · Sep 2026
· source
· release history
Extends the LDAP analyzer to forward SASL payloads from bindRequest/bindResponse to GSSAPI and NTLM parsers, enriching ntlm.log and kerberos.log.
v9.0.0 · Aug 2026
· source
· release history
Extends NTLM analyzer to parse challenge and response fields
v5.2.0 · Feb 2023
· source
· release history
+Syslog protocol analysisshippedParses Syslog traffic over UDP and extends support to TCP via Octet Counting and Non-Transparent-Framing on port 514/tcp.2 releases · first seen Aug 2026▸
Supports TCP in the Syslog analyzer.
announced · Sep 2026
· source
· release history
Extends the Syslog analyzer to support TCP via Octet Counting and Non-Transparent-Framing on port 514/tcp.
v9.0.0 · Aug 2026
· source
· release history
+MIME entity parsing depth limitingshippedLimits the depth of nested MIME entity parsing and generates a warning event when the configured limit is reached.1 release · first seen Jan 2024▸
Adds MIME::max_depth configuration option to limit nested MIME entity parsing depth, generating an exceeded_mime_max_depth weird event when the limit is reached.
v6.0.3 · Jan 2024
· source
· release history
+MOUNT3 protocol analysisshippedParses MOUNT3 protocol traffic and exposes associated events, with manual port or DPD registration required.1 release · first seen Jul 2019▸
Adds MOUNT3 protocol parser with events mount_proc_null, mount_proc_mnt, etc. (requires manual port/DPD registration)
v2.6 · Jul 2019
· source
· release history
+Analysis scripting and extensions6 featuresNetwork analysissince 2019▸
+Scripting languageshippedProvides a domain-specific scripting language with operators for type-checking, casting, bitwise operations, and case-insensitive pattern matching.62 releases · 10 other sources · first seen Jul 2019▸
Shared capability: Analysis scripting and extensions
Also counts toward: Scripting language support
release
62 total
Adds the ?as operator to Zeek's scripting language for safely checking type-conversion compatibility at runtime.
announced · Sep 2026
· source
· release history
Extends the as casting operator to cover all type conversions previously requiring explicit BiFs such as interval_to_double(), plus additional natural companions.
v9.0.0 · Aug 2026
· source
· release history
Adds $attributes field to script_id records returned by global_ids() BiF, exposing identifier attributes.
v9.0.0 · Aug 2026
· source
· release history
Adds ?as operator to test whether a value can be safely cast to a target type at script level.
v9.0.0 · Aug 2026
· source
· release history
Extends the Input Framework to read pattern values with case-insensitive (/foo/i) and single-line (/bar/s) modifiers.
v9.0.0 · Aug 2026
· source
· release history
New modulo BiF added, with different behavior from % for negative numbers.
v8.2.0 · May 2026
· source
· release history
example
10 total
Clear a vector without recreating it to avoid allocation overhead in tight loops.$ global v = vector(1, 2, 3); delete v;
v7.0.0 · Jul 2024
· source
Parse a JSON string directly into a typed Zeek record to process external data sources.$ type A: record { a: addr; }; local p = from_json('{"a": "192.168.0.1"}', A); if ( p$valid ) print (p$v as A);
v6.0.0 · May 2023
· source
Retrieve the network timestamp associated with the current event handler for time-correlated analysis.$ local t = current_event_time(); print t;
v6.0.0 · May 2023
· source
Suppress deprecation warnings in a script that relies on base scripts for compatibility while using deprecated fields.$ @pragma push ignore-deprecations @load standard/init.zeek @pragma pop
v6.0.0 · May 2023
· source
Use the new ordered attribute to preserve insertion order when iterating over a set of IPs.$ local ips: set[addr] &ordered = { 10.0.0.1, 10.0.0.2 };
v5.2.0 · Feb 2023
· source
Disable all event handlers in the FTP module to reduce overhead during high-volume logging periods.$ disable_module_events('FTP');
v5.2.0 · Feb 2023
· source
+Logging and file APIshippedExposes built-in functions for querying and controlling log streams, log filters, and file lookups at runtime.29 releases · 7 other sources · first seen Jul 2019▸
Shared capability: Analysis scripting and extensions
Also counts toward: Scripting API, Scripting language support
release
29 total
Adds multiple configuration options for handling binary data in JSON logging, resolving a long-standing ambiguity.
announced · Sep 2026
· source
· release history
Adds Reporter::limit_reached_weird BIF to report size-limit violations, logging a named weird and appending X to the connection history field.
v9.0.0 · Aug 2026
· source
· release history
Adds Log::json_string_escape_policy (type JSON::STRING_ESCAPE_POLICY_*) to make control-character and invalid UTF-8 escaping in JSON logging configurable; default remains JSON::STRING_ESCAPE_POLICY_HEX.
v9.0.0 · Aug 2026
· source
· release history
ASCII control characters < 32 in JSON strings are now escaped as \xXX again (reverted from the \u00XX style introduced in Zeek 8.1); consumers relying on the \u00XX encoding from 8.1 will see changed output.
v8.2.0 · May 2026
· source
· release history
Adds Log::default_max_field_string_bytes and three other log truncation variables to control maximum string and container lengths in output
v8.1.0 · Dec 2025
· source
· release history
The ASCII writer's JSON::TS_MILLIS format now produces signed integers for pre-epoch timestamps; revert with redef LogAscii::json_timestamps = JSON::TS_MILLIS_UNSIGNED;.
v8.0.0 · Aug 2025
· source
· release history
example
7 total
Switch JSON log escaping to TSV-style (reversible) encoding instead of the default hex encoding, so downstream SIEM parsers can round-trip binary fields correctly.$ redef Log::json_string_escape_policy = JSON::STRING_ESCAPE_POLICY_TSV;
v9.0.0 · Aug 2026
· source
Extract raw emails as .eml files from SMTP traffic for offline analysis or malware triage.$ redef SMTP::enable_rfc822_msg_file_analysis = T; event file_over_new_connection(f: fa_file, c: connection, is_orig: bool) { if ( f$id == c$smtp$rfc822_msg_fuid ) Files::add_analyzer(f,…
v8.0.0 · Aug 2025
· source
Cap log record size to protect against remote DoS via oversized records and surface violations as a weird in notice logs.$ zeek -r <capture.pcap> Log::max_log_record_size=1000000
v7.0.9 · Jul 2025
· source
Cap log record size network-wide to reduce DoS risk from crafted packets that produce abnormally large log entries.$ redef Log::max_log_record_size = 1000000;
v7.2.2 · Jul 2025
· source
Defer a log entry for 2 seconds while querying an external API for enrichment data.$ Log::delay(2.0); // ... query external API ... Log::delay_finish()
v6.2.0 · Feb 2024
· source
Enable the new Community ID support by loading the provided policy script alongside your standard analysis profile.$ @load protocols/conn/community-id-logging
v6.0.0 · May 2023
· source
+Local site policy script executionshippedRuns the tool with local site policy scripts applied to customise its behaviour.6 releases · 1 other source · first seen Sep 2019▸
Shared capability: Analysis scripting and extensions
release
Zeek treats private address space as local by default via Site::private_address_space_is_local; prior behavior can be restored with a redef to false.
v6.0.0 · May 2023
· source
· release history
zeek now bundles the zkg package manager with its toplevel script at $prefix/bin/zkg, config at $prefix/etc/zkg/config, and state at $prefix/var/lib/zkg. Use the ZKG_CONFIG_FILE environment variable or the --configfile CLI flag to override the default configuration path.
v4.0.0 · Dec 2020
· source
· release history
Reorganized file signatures may break scripts that explicitly load moved signature files.
v3.2.0 · Jul 2020
· source
· release history
Scripts with .bro endings now abort with an error instead of a warning; rename to .zeek or remove backwards-compatibility wrappers
v3.1.0 · Feb 2020
· source
· release history
local.bro site script is renamed to local.zeek; .bro scripts in the tree are renamed to .zeek.
v3.0.0 · Sep 2019
· source
· release history
bro, bro-config, broctl, and bro-cut executables emit deprecation warnings; use zeek, zeek-config, zeekctl, and zeek-cut instead.
v3.0.0 · Sep 2019
· source
· release history
example
Run with the local site policy scripts$ zeek -r traffic.pcap local
+JavaScript scripting supportshippedAllows execution of JavaScript and CommonJS script files as an alternative scripting surface alongside the native Zeek scripting language.5 releases · 1 other source · first seen May 2023▸
Shared capability: Analysis scripting and extensions
Also counts toward: JavaScript scripting support, Scripting API, Scripting language support
release
ZeekJS plugin now requires C++20 std::format, dropping support for older distributions like Debian 12 with GCC 12.x
v9.0.0 · Aug 2026
· source
· release history
The ZeekJS plugin now requires std::format from C++20, dropping support for older distributions using GCC 12.x such as Debian 12.
v9.0.0 · Aug 2026
· source
· release history
Calling zeek::fmt() from non-main threads now emits a warning (and aborts in debug builds); plugins spawning threads must switch to threading::BasicThread::Fmt() or std::format().
v9.0.0 · Aug 2026
· source
· release history
Includes ZeekJS documentation in the main Zeek docs at docs.zeek.org by default.
v7.2.0 · Apr 2025
· source
· release history
Adds experimental JavaScript support via the zeekJS builtin plugin, enabling execution of .js and .cjs files with events like zeek_init.
v6.0.0 · May 2023
· source
· release history
example
Execute a Zeek script written in JavaScript to initialize analysis logic on startup.$ zeek ./hello.js
v6.0.0 · May 2023
· source
+Plugin hook for pre-execution AST introspectionshippedProvides an InitPreExecution() plugin hook that runs after ZAM optimizations and before zeek_init() is enqueued, allowing plugins to inspect or act on the AST at that stage.1 release · first seen Dec 2024▸
Shared capability: Analysis scripting and extensions
Also counts toward: Plugin API support
release
Adds a new InitPreExecution() plugin hook for AST introspection after ZAM optimizations, executing before zeek_init() is enqueued.
v7.1.0 · Dec 2024
· source
· release history
+Raw TCP stream exposureshippedProvides a StreamEvent pseudo protocol analyzer that delivers raw TCP stream data to the scripting layer via a stream_deliver() event.1 release · first seen Dec 2024▸
Shared capability: Analysis scripting and extensions
Also counts toward: Scripting API, Scripting language support
release
Adds a StreamEvent pseudo protocol analyzer that exposes raw TCP stream data to the scripting layer via the new stream_deliver() event.
v7.1.0 · Dec 2024
· source
· release history
+Packet capture (live and offline)1 featureNetwork analysissince 2020▸
+Live network traffic monitoringshippedCaptures and monitors network traffic in real time on a specified network interface.13 releases · 5 other sources · first seen Feb 2020▸
Shared capability: Packet capture (live and offline)
release
13 total
Adds zeek -i udp::0.0.0.0:4789:vxlan UDP packet source (bundled zeek-packet-source-udp plugin) to receive VXLAN or GENEVE mirror traffic over UDP without raw packet capture; uses SO_REUSEPORT for multi-worker kernel load-balancing.︀︄︇︀︅︉︀︅︀︀︃︀︀︅︅︀︅︊︀︄︆︀︃︄︀︄︇︀︅︉︀︅︀︀︃︀︀︅︅︀︅︊︀︄︆︀︃︄
v9.0.0 · Aug 2026
· source
· release history
Adds zeek -i udp::0.0.0.0:4789:vxlan support for processing UDP-based VXLAN or GENEVE mirror traffic directly via a new zeek-packet-source-udp plugin enabled by default on Linux
v9.0.0 · Aug 2026
· source
· release history
Adds remove_exclude(name) function to the PacketFilter framework to remove a previously added exclude filter by name
v6.0.4 · May 2024
· source
· release history
PacketFilter now includes remove_exclude function for removing filters by name
v6.2.1 · May 2024
· source
· release history
Adds pkts_filtered field to the network statistics record type for reporting packets filtered by the interface before hand-off.
v6.0.0 · May 2023
· source
· release history
Allows configuring Pcap idle timeout via the Pcap::non_fd_timeout setting (default 20usec).
v6.0.0 · May 2023
· source
· release history
docs
Network traffic analysis framework that monitors network activity and provides high-level semantic analysis across many protocols.
example
Dynamically remove a named exclusion from a PacketFilter during runtime.$ filter::remove_exclude('my_exclude_rule')
v6.2.1 · May 2024
· source
Dynamically remove a named packet filter exclusion within a Zeek script without restarting or reloading entirely.$ PacketFilter::remove_exclude("my_filter_name")
v6.0.4 · May 2024
· source
Reduce CPU usage on low-traffic networks by tuning the sleep interval for Myricom or similar non-fd packet sources.$ @load frameworks/pcap/pcap.zeek global Pcap::non_fd_timeout = 50us;
v5.2.1 · Apr 2023
· source
Live network monitoring on an interface$ zeek -i eth0
+Unknown IP protocol connection loggingshippedLogs connections using IP protocols other than TCP, UDP, and ICMP to conn.log, adding an ip_proto column and an optional ip_proto_name column available via a policy script.3 releases · 1 other source · first seen Dec 2024▸
Shared capability: Network traffic logging
release
Populates the ip_proto field for connections encapsulated in tunnels.
v7.2.0 · Apr 2025
· source
· release history
Adds DPD::track_removed_services_in_connection option and a new protocols/conn/failed-service-logging.zeek policy script that adds a failed_service column to connection.log.
v7.2.0 · Apr 2025
· source
· release history
Logs previously invisible IP connections using unknown IP protocols (e.g. not TCP/UDP/ICMP) in conn.log with a new ip_proto column; optional ip_proto_name column available via policy script.
v7.1.0 · Dec 2024
· source
· release history
example
Track which protocol analyzers failed per connection by loading the new failed-service policy script, adding failed_service to connection.log.$ zeek -C -r trace.pcap @load protocols/conn/failed-service-logging
v7.2.0 · Apr 2025
· source
+Packet crafting and generation1 featureNetwork analysissince 2026▸
+PCAP file generationverifiedGenerates a pcap file with configurable long HTTP header lines, controlling the number of lines, header value length, and output filename.4 other sources · first seen Jul 2026▸
+New protocol support (added dissectors)1 featureNetwork analysissince 2026▸
+ZIP file analysisshippedMaps the bundled Spicy ZIP file analyzer to the application/zip MIME type with configurable recursive ZIP depth.3 releases · first seen Aug 2026▸
Shared capability: New protocol support (added dissectors)
release
Adds a new, optional ZIP file analyzer that reports contained files to files.log.
announced · Sep 2026
· source
· release history
Adds policy/files/zip/register.zeek to map the bundled Spicy ZIP file analyzer to the application/zip MIME type; recursive ZIP depth is controlled by Spicy::max_file_depth.
v9.0.0 · Aug 2026
· source
· release history
Adds Spicy::max_file_depth variable to control recursive search depth for ZIP file analysis within other protocols
v9.0.0 · Aug 2026
· source
· release history
+Other / not yet classified18 featuresFeatures we have not matched to a capability yet. A suggested match is marked.▸
+Broker communication frameworkshippedProvides a cluster communication layer via the broker framework, replacing the deprecated communication framework.27 releases · 6 other sources · first seen Jul 2019▸
release
27 total
The minimum version requirement for ZeroMQ is now 4.3.0; older ZeroMQ installations will no longer work.
v8.2.0 · May 2026
· source
· release history
ZeroMQ cluster communication now supports CURVE encryption; keys auto-generated by ZeekControl when a multi-node cluster is detected, or manually configured via cluster_backend_zeromq.use_curve_encryption.
v8.2.0 · May 2026
· source
· release history
The default cluster backend for standalone zeek invocations changed from Broker to No-op (Cluster::CLUSTER_BACKEND_NONE).
8.1.0 · Dec 2025
· source
· release history
Adds two new hooks Cluster::on_subscribe() and Cluster::on_unsubscribe() to observe subscription events on cluster backends.
8.1.0 · Dec 2025
· source
· release history
Missing network timestamp metadata on remote events is no longer silently set to local network time; re-enable with redef EventMetadata::add_missing_remote_network_timestamp = T;.
v8.0.0 · Aug 2025
· source
· release history
Network timestamps are no longer added to events by default; re-enable with redef EventMetadata::add_network_timestamp = T;.
v8.0.0 · Aug 2025
· source
· release history
example
Generate a Z85 CURVE keypair for encrypted ZeroMQ cluster communication and inspect it.$ zeek -e 'print to_json(Cluster::Backend::ZeroMQ::generate_keypair())' | jq
v8.2.0 · May 2026
· source
Switch a ZeekControl-managed cluster to the ZeroMQ backend with WebSocket support so zeekctl print and netstats work without the Broker protocol.$ ClusterBackend = ZeroMQ UseWebSocket = 1
v8.0.0 · Aug 2025
· source
Configure SQLite durability/performance trade-offs for Broker data stores via redef.$ redef Broker::SQLite::synchronous = 'normal'; redef Broker::SQLite::journal_mode = 'wal';
v5.2.0 · Feb 2023
· source
Enable WebSocket communication for external clients to exchange events with Zeek via JSON on port 9997.$ Broker::listen_websocket()
v5.0.0 · Jun 2022
· source
Opt-in to RocksDB persistent storage for Broker data stores during Zeek configuration.$ ./configure --enable-rocksdb --with-rocksdb=/usr/local/rocksdb
v3.2.0 · Jul 2020
· source
Sync a global counter table across a Zeek cluster using Broker MEMORY backend for high availability.$ global t: table[string] of count &backend=Broker::MEMORY;
v3.2.0 · Jul 2020
· source
+Runtime telemetry and metrics exportshippedExposes a Telemetry API for collecting runtime metrics and exporting them to Prometheus.21 releases · 2 other sources · first seen Aug 2021▸
release
21 total
ZeroMQ XPUB/XSUB proxy metrics (zeek_cluster_zeromq_proxy_{frontend,backend}_{bytes,messages}_{sent,received}) are now exposed for cluster traffic monitoring.
v8.2.0 · May 2026
· source
· release history
The MetricsAddress default in zeekctl.cfg changed from 0.0.0.0 to 127.0.0.1; remote Prometheus scrapers or containerized deployments must now explicitly set MetricsAddress = 0.0.0.0 in zeekctl.cfg.
v8.2.0 · May 2026
· source
· release history
Adds MetricsAddr option in Zeekctl to override the address the telemetry framework uses when communicating with Prometheus (defaults to 0.0.0.0).
v8.0.1 · Aug 2025
· source
· release history
Adds configurable cluster telemetry with per-event, per-topic, and histogram metrics via Cluster::core_metrics and Cluster::websocket_metrics.
v8.0.0 · Aug 2025
· source
· release history
Adds X-Application-Name HTTP header support on the WebSocket API (v1/messages/json) for per-application cluster event metrics.
v8.0.0 · Aug 2025
· source
· release history
The endpoint label in Prometheus and telemetry.log metrics is renamed to node; revert with redef Telemetry::metrics_endpoint_label = "endpoint";.
v8.0.0 · Aug 2025
· source
· release history
example
Override the Prometheus telemetry listener address in Zeekctl so it binds to a specific interface instead of all interfaces.$ # In zeekctl.cfg: MetricsAddr = 192.168.1.10
v8.0.1 · Aug 2025
· source
Enable metric logging to capture telemetry data for external monitoring systems.$ @load policy/frameworks/telemetry/log
v5.1.0 · Sep 2022
· source
+Supervisor-based cluster managementshippedProvides a built-in Supervisor mode that manages a cluster of persistent Zeek processing nodes without relying on external tools.14 releases · 3 other sources · first seen Feb 2020▸
Also counts toward: Command-line interface
release
14 total
Adds a new declarative zeek.conf cluster configuration file consumed by Zeek's systemd generator to produce systemd unit files for orchestrating Zeek clusters, including multi-machine deployments.︀︄︇︀︅︉︀︅︀︀︃︀︀︅︅︀︅︊︀︄︆︀︃︄
announced · Sep 2026
· source
· release history
Adds a new declarative zeek.conf cluster configuration file consumed by Zeek's systemd generator to produce systemd unit files for orchestrating Zeek clusters, including multi-machine deployments.︀︄︇︀︅︉︀︅︀︀︃︀︀︅︅︀︅︊︀︄︆︀︃︄︀︄︇︀︅︉︀︅︀︀︃︀︀︅︅︀︅︊︀︄︆︀︃︄
announced · Sep 2026
· source
· release history
Extends zeek.conf and zeek-systemd-generator to support multiple interfaces and multi-host deployments.
v9.0.0 · Aug 2026
· source
· release history
Adds zeek-systemd-generator executable and /etc/zeek/zeek.conf for opinionated single-node cluster deployment on Linux
v8.1.0 · Dec 2025
· source
· release history
Extends ZeekControl's log archival logic to distinguish between multiple logger nodes by appending the logger's name to rotated file names, preventing data loss in multi-logger setups.
v6.0.0 · May 2023
· source
· release history
Enables the supervisor framework to start worker nodes that read from a trace file.
v6.0.0 · May 2023
· source
· release history
docs
When managing a multi-host cluster, ZeekControl uses SSH from the manager to run commands and deploy configuration and policy files on the other cluster hosts. The account used by ZeekControl therefore must have administrative access across the cluster.
seen Aug 2026
· source
example
Configure the build to use a specific directory for persistent state rather than the default var/lib.$ ./configure --statedir=/custom/state/dir
v5.0.0 · Jun 2022
· source
Launch Zeek in Supervisor mode to manage a cluster of persistent processing nodes.$ zeek -j <path_to_supervisor_script>
v3.1.0 · Feb 2020
· source
+Runtime dynamic configurationshippedsuggestedAllows script options to be updated at runtime across a cluster, including via external files, without restarting the tool.11 releases · 2 other sources · first seen Jul 2019▸
Suggested capability: Analysis scripting and extensions. This is our guess, not confirmed.
Also counts toward: Scripting API
release
11 total
New connection_timing_out hook allows scripts to prevent Zeek from timing out a specific connection, useful for keeping shunted connections alive.
v8.2.0 · May 2026
· source
· release history
Adds default_limit_includes_missing option to customize behavior when encountering large amounts of missed bytes in file extraction
v5.0.10 · Sep 2023
· source
· release history
Adds allow_network_time_forward=F setting to prevent automatic updates of network_time() to current time.
v6.0.0 · May 2023
· source
· release history
Known policy data stores now default to local instead of Broker, potentially affecting cluster synchronization behavior.
v5.2.1 · Apr 2023
· source
· release history
Sumstats now supports manual epochs; specifying an epoch interval of 0 requires manual ending via SumStats::next_epoch, allowing synchronization with other events.
v4.0.0 · Dec 2020
· source
· release history
CaptureLoss::initial_watch_interval option provides immediate capture loss feedback upon cluster restart without waiting for the full default 15-minute interval.
v4.0.0 · Dec 2020
· source
· release history
example
Subscribe to runtime changes of an option variable and process the new value when it updates$ event bro_init() { Option::set_change_handler("my_opt", my_handler); } function my_handler(id: string, val: bool): bool { print fmt("%s changed to %s", id, val); return val; }
v2.6 · Jul 2019
· source
Dynamically update a script option from an external file at runtime without restarting$ redef Config::config_files += { "/etc/zeek/options.dat" };
v2.6 · Jul 2019
· source
+Intelligence frameworkshippedManages and applies threat intelligence data, with hooks to filter items before insertion and configurable source path prefixes.9 releases · 1 other source · first seen Sep 2019▸
release
9 total
Adds Software::parse_cache_interval, Software::found_cache_interval, and Software::max_software_cache_size tunables to the software framework for finer control over version-detection caching.
announced · Sep 2026
· source
· release history
Adds Intel::seen_policy hook to intercept and modify Intel framework behavior
v6.2.0 · Feb 2024
· source
· release history
Adds file_over_new_connection event to the Intel framework for handling files received over established connections like HTTP
v5.1.2 · Feb 2023
· source
· release history
Adds the file_over_new_connection event to the Intel framework for files received over established connections like HTTP.
v5.0.6 · Feb 2023
· source
· release history
The input framework now skips input lines with unset fields for non-optional record fields, whereas previously it may have accepted them.
v4.1.0 · Aug 2021
· source
· release history
Adds a file signature to identify ISO9660 disk images (application/x-iso9660-image).
v3.2.0 · Jul 2020
· source
· release history
example
Cap the software framework's detection cache to limit memory use and reduce noisy software-version log churn in high-volume environments.$ redef Software::max_software_cache_size = 5000; redef Software::parse_cache_interval = 1min; redef Software::found_cache_interval = 5min;
announced · Sep 2026
· source
+Docker image distributionshippedProvides official Docker images for release and development builds of Zeek via the zeekurity organisation on Docker Hub.7 releases · 2 other sources · first seen Jan 2022▸
release
7 total
Official Zeek Docker images are now based on Debian 13.0 (trixie).
v8.0.1 · Aug 2025
· source
· release history
Packagers can include a local addition into Zeek's version string via build flag --localversion=XXX and the LOCALVERSION environment variable for Docker builds.
v7.0.0 · Jul 2024
· source
· release history
configure script supports --localversion to customize the version string output
v6.2.1 · May 2024
· source
· release history
Adds --localversion option to the configure script to append custom strings to the version reported by zeek -v
v6.0.4 · May 2024
· source
· release history
Zeek container images are no longer pushed to the zeekurity organization; use zeek/zeek on DockerHub or public.ecr.aws/zeek/zeek instead.
v6.0.0 · May 2023
· source
· release history
Publishes container images to zeek/zeek and zeek/zeek-dev on Docker Hub
v5.2.0 · Feb 2023
· source
· release history
example
Customize the version string reported by Zeek for tracking specific deployments.$ ./configure --localversion='custom-build-1'
v6.2.1 · May 2024
· source
Build Zeek with a custom version string for internal tracking or identification.$ ./configure --localversion="-internal-build-123"
v6.0.4 · May 2024
· source
+Package manager integrationshippedsuggestedBundles the zkg package manager with Zeek, allowing installation and management of Zeek script packages with configurable paths and repository settings.6 releases · 2 other sources · first seen Dec 2020▸
Suggested capability: Analysis scripting and extensions. This is our guess, not confirmed.
Also counts toward: Command-line interface
release
New can_load() helper function backed by bif find_in_zeekpath() allows guarding @load directives when script packages may or may not be installed.
v7.0.0 · Jul 2024
· source
· release history
Zeek no longer traverses into dot directories in ZEEK_PLUGIN_PATH or ZEEK_SPICY_MODULE_PATH; plugins in such directories will be skipped.
v6.1.0 · Oct 2023
· source
· release history
The __bro_plugin__ file generated during plugin builds is renamed to __zeek_plugin__, breaking older zkg versions that rely on the old filename.
v6.1.0 · Oct 2023
· source
· release history
Adds --include-plugins argument to configure for statically built plugin paths.
v4.1.0 · Aug 2021
· source
· release history
Adds --plugindir argument to configure to set the plugin installation path.
v4.1.0 · Aug 2021
· source
· release history
zeek now bundles the zkg package manager with its toplevel script at $prefix/bin/zkg, config at $prefix/etc/zkg/config, and state at $prefix/var/lib/zkg. Use the ZKG_CONFIG_FILE environment variable or the --configfile CLI flag to override the default configuration path.
v4.0.0 · Dec 2020
· source
· release history
example
Conditionally load a script package only if it is present in the Zeek path to prevent errors on minimal installations.$ @if ( can_load("my-package") ) @load my-package @endif
v7.0.0 · Jul 2024
· source
Override the default zkg configuration path using an environment variable for a custom package repository setup.$ export ZKG_CONFIG_FILE=/etc/custom-zkg/config && zkg install zeek/zeek-aux
v4.0.0 · Dec 2020
· source
+ZeroMQ cluster transportshippedProvides ZeroMQ-based cluster communication with CURVE encryption support, configurable minimum version requirements, and proxy metrics export.7 releases · first seen Dec 2025▸
release
7 total
The default cluster communication backend is now ZeroMQ instead of Broker; scripts or packages that rely on Broker-specific eventing must re-enable the Broker backend explicitly.
announced · Sep 2026
· source
· release history
Switches the default cluster communication backend from Broker to ZeroMQ, enabling direct worker-to-worker eventing, cluster-wide event publishing, and single-point cluster event tapping.
announced · Sep 2026
· source
· release history
Splits zeromq/main.zeek options into a separate zeromq/options.zeek file to allow standalone Zeek processes to connect to the ZeroMQ layer without participating in cluster node events.
v9.0.0 · Aug 2026
· source
· release history
ZeroMQ XPUB/XSUB proxy metrics (zeek_cluster_zeromq_proxy_{frontend,backend}_{bytes,messages}_{sent,received}) are now exposed for cluster traffic monitoring.
v8.2.0 · May 2026
· source
· release history
The minimum version requirement for ZeroMQ is now 4.3.0; older ZeroMQ installations will no longer work.
v8.2.0 · May 2026
· source
· release history
ZeroMQ cluster communication now supports CURVE encryption; keys auto-generated by ZeekControl when a multi-node cluster is detected, or manually configured via cluster_backend_zeromq.use_curve_encryption.
v8.2.0 · May 2026
· source
· release history
+Cluster controller and management clientshippedProvides a cluster controller framework and a zeek-client command-line management client for controlling Zeek cluster deployments.5 releases · 1 other source · first seen Aug 2021▸
Also counts toward: Agent-based deployment, Command-line interface
release
Adds tls_options_websocket variable to the management framework controller configuration for setting TLS options on the controller's WebSocket server.
v8.0.3 · Oct 2025
· source
· release history
Adds an experimental ZeroMQ-based cluster backend as a drop-in alternative to Broker publish-subscribe.
v7.1.0 · Dec 2024
· source
· release history
Loads the cluster controller via policy/frameworks/management/controller and agents via policy/frameworks/management/agent to enable single-instance cluster setups on one machine.
v5.0.0 · Jun 2022
· source
· release history
Adds zeek-client executable as the cluster management client for uploading configs, deploying them, checking node status, restarting nodes, and retrieving global identifiers.
v5.0.0 · Jun 2022
· source
· release history
Adds initial cluster controller framework and zeek-client management client with --enable-zeek-client configure option.
v4.1.0 · Aug 2021
· source
· release history
example
Switch a cluster node to the experimental ZeroMQ backend and tune per-peer Broker buffer overflow policy for remaining Broker peers.$ @load frameworks/cluster/backend/zeromq/connect # Or, to keep Broker but tune backpressure: redef Broker::peer_buffer_size = 4096; redef Broker::peer_overflow_policy = "drop_oldest";
v7.1.0 · Dec 2024
· source
+Pluggable connection key and VLAN-aware connection trackingshippedsuggestedProvides a pluggable connection tracking framework with a built-in VLAN-aware five-tuple implementation that tracks connections separately per VLAN and logs VLAN tags to connection records.3 releases · 2 other sources · first seen Aug 2025▸
Suggested capability: Network traffic logging. This is our guess, not confirmed.
Also counts toward: Plugin API support, Plugin system
release
Adds VNI-aware connection tracking via policy/frameworks/conn_key/packet_source/udp/vxlan_vni policy script when using the UDP packet source.
v9.0.0 · Aug 2026
· source
· release history
The public vlan and inner_vlan C++ Packet members changed from uint32_t to an optional VlanTag struct; the dei and pcp members were removed and merged into VlanTag. C++ plugins accessing these fields must be updated (access via packet.vlan->id after checking the optional).
v8.2.0 · May 2026
· source
· release history
Adds pluggable, customizable connection tracking with a built-in VLAN-aware five-tuple implementation (frameworks/conn_key/vlan_fivetuple).
v8.0.0 · Aug 2025
· source
· release history
example
Enable VNI-aware connection tracking so each VXLAN tenant network is tracked separately — load alongside the UDP packet source.$ zeek -i udp::0.0.0.0:4789:vxlan policy/frameworks/conn_key/packet_source/udp/vxlan_vni
v9.0.0 · Aug 2026
· source
Enable VLAN-aware connection tracking so that connections on different VLANs are tracked separately, with VLAN tags logged as id.ctx.vlan and id.ctx.inner_vlan.$ @load frameworks/conn_key/vlan_fivetuple
v8.0.0 · Aug 2025
· source
+Storage frameworkshippedProvides a persistent key-value storage framework with SQLite and Redis backends, supporting synchronous and asynchronous access modes and cluster-aware operation, replacing Broker-based storage.4 releases · 1 other source · first seen Apr 2023▸
release
Extends the known-certs, known-hosts, and known-services scripts with storage-framework options including enable_hosts_persistence, host_store_prefix, host_store_backend_type, and host_store_backend_options (SQLite backend under Cluster::default_store_dir by default).
v9.0.0 · Aug 2026
· source
· release history
New &publish_on_change attribute for global tables and sets enables efficient publishing of selected table changes as remote events to a configurable cluster topic, replacing deprecated Broker-specific sync attributes.
v8.2.0 · May 2026
· source
· release history
Adds a new Storage framework with SQLite and Redis backends, replacing Broker-based storage; supports async (Storage::Async) and sync (Storage::Sync) modes and cluster environments.
v7.2.0 · Apr 2025
· source
· release history
Changes default data store for known-{hosts,certs,services} policies from Broker to local
v5.2.1 · Apr 2023
· source
· release history
example
Publish only newly-added entries from a cluster-shared set to all nodes without Broker, replacing &broker_store.$ global endpoints: set[addr, addr] &write_expire=5min &publish_on_change=[ changes=set(TABLE_ELEMENT_NEW), ];
v8.2.0 · May 2026
· source
+Windows platform supportshippedProvides an experimental Zeek binary for running on Microsoft Windows environments.3 releases · first seen Feb 2023▸
release
Ships Spicy 1.17.0 with a control-flow-graph-based optimizer delivering 20–60% microbenchmark performance improvements and Windows (MSVC) build support.
announced · Sep 2026
· source
· release history
Windows support substantially improved; btest suite now runs on CI and the majority of tests pass.
v8.2.0 · May 2026
· source
· release history
Adds experimental zeek binary for Microsoft Windows environments
v5.2.0 · Feb 2023
· source
· release history
+Input framework pattern supportshippedExtends the Input Framework to read pattern values with case-insensitive and single-line regex modifiers.3 releases · first seen Aug 2021▸
release
Extends the Input Framework to read pattern values with case-insensitive (/foo/i) and single-line (/bar/s) modifiers.
v9.0.0 · Aug 2026
· source
· release history
Input framework now skips lines with unset fields for non-optional record fields or complex table indexes, enforcing &optional requirement
v4.0.3 · Aug 2021
· source
· release history
Input framework logic change: lines containing unset fields for non-optional record fields or complex table indexes are now silently skipped rather than potentially causing inconsistent state
v4.0.3 · Aug 2021
· source
· release history
+GeoIP and ASN database configurationshippedAllows configuring the paths to MaxMind city, country, and ASN databases, and the fallback directory used when databases are not found at the primary paths.3 releases · first seen Feb 2024▸
release
Expands Site::private_address_space with additional non-routable subnets from RFCs 2365, 3058, 3879, and 5771.
v7.2.0 · Apr 2025
· source
· release history
Site::private_address_space now includes 239.0.0.0/8, 224.0.0.0/24, [2002:e000::]/40, [2002:ef00::]/24, and [fec0::]/10, which may cause traffic previously considered non-local to be treated as local.
v7.2.0 · Apr 2025
· source
· release history
Makes MaxMind database paths configurable via mmdb_city_db, mmdb_country_db, mmdb_asn_db and the fallback path via mmdb_dir_fallbacks
v6.2.0 · Feb 2024
· source
· release history
+Community ID flow hashingshippedsuggestedAdds native Community ID v1 flow hash generation via a built-in function and policy scripts that extend connection and notice logs with Community ID values.2 releases · 1 other source · first seen May 2023▸
Suggested capability: Network flow analysis. This is our guess, not confirmed.
release
Auto-logs community ID when loading policy/frameworks/notice/community-id.zeek
v6.0.1 · Sep 2023
· source
· release history
Adds native Community ID support with the community_id_v1() bif and extends logs via new policy scripts protocols/conn/community-id-logging and frameworks/notice/community-id.
v6.0.0 · May 2023
· source
· release history
example
Enable the new Community ID support by loading the provided policy script alongside your standard analysis profile.$ @load protocols/conn/community-id-logging
v6.0.0 · May 2023
· source
+Event metadata accessshippedsuggestedProvides an EventMetadata module with functions to access per-event metadata such as network timestamps for current and all active events.2 releases · first seen Aug 2025▸
Suggested capability: Analysis scripting and extensions. This is our guess, not confirmed.
release
Adds a generic EventMetadata module with current() and current_all() functions for accessing per-event metadata.
v8.0.0 · Aug 2025
· source
· release history
Network timestamps are no longer added to events by default; re-enable with redef EventMetadata::add_network_timestamp = T;.
v8.0.0 · Aug 2025
· source
· release history
+Script execution profilingshippedsuggestedRecords per-function call counts, CPU time, and memory allocation across script execution and writes a TSV profile on termination.1 release · 1 other source · first seen Jun 2022▸
Suggested capability: Analysis scripting and extensions. This is our guess, not confirmed.
Also counts toward: Command-line interface
release
Adds --profile-scripts[=file] command-line option (default: stdout) that writes a TSV profile of every function body including call counts, CPU time, and memory allocated upon termination.
v5.0.0 · Jun 2022
· source
· release history
example
Profile script execution to identify performance bottlenecks in CPU time or memory usage upon termination.$ zeek --profile-scripts=profile.tsv script.zeek
v5.0.0 · Jun 2022
· source
+SQLite logging backendshippedWrites log records to SQLite databases with configurable journal mode and synchronous mode settings, including WAL mode support.1 release · first seen Dec 2024▸
release
Adds SQLite journal mode and synchronous mode configuration to the SQLite logger, including WAL mode support via LogSQLite::journal_mode.
v7.1.0 · Dec 2024
· source
· release history
Lines in monospace are the tool's own words: help text
parsed from its source, or an endpoint from its API document. Under
release, a line is our summary of a dated release. Under
docs, it is quoted from the tool's own documentation or
website. Each links back to the source it came from.
Command line
View
Source
No command matches.
load a captured run
composed command
No matchesTry a different search, or clear a filter to see more.
option surface across analysed releases
options at that releaseadded, per releaseremoved, per release
option
found in
since
description
No matchesTry a different search, or clear a filter to see more.
option changes per release — drag across the rail to set a range
→
Values are placeholders taken from each option’s declared default.
Nothing is executed here — the output shown is a recording of a run
that already happened.
Screenshots
From the release notes, newest first. Click one to see it full size.
What the Zeek community has worked out wherever it talks: mailing lists,
forums, Q&A sites, issue trackers and discussion threads. These are the
conversations that explain a behaviour, settle a use, or flag a change you must
handle, summarised, with a link to the original.
The thread discusses configuring Zeek with PF_RING ZeroCopy to reduce packet drops, identifying that using the 'pf_ring::' prefix in the interface configuration is required for the plugin to function correctly. It was worked out that redirecting traffic to dummy interfaces via zbalance_ipc and binding workers to specific CPUs prevents high CPU usage and data loss. Readers should ensure their Zeek binary lists the PF_RING plugin, use the correct interface syntax, and avoid binding both the balancing tool and Zeek workers to the same CPU cores.
Confirmed in the thread
In Zeek (Bro) with the PF_RING plugin, the node.cfg interface value must be prefixed with pf_ring:: for the plugin to actually be used; without the prefix Bro just opens the interface through libpcap and ignores PF_RING load balancing.
Applies to
Bro 2.5.1 using the aux PF_RING plugin (Bro::PF_RING, dynamic plugin) with pf_ring 6.6.0 and ixgbe_zc, tested on CentOS 7.2 and Ubuntu 16.04
What to do
When setting up Zeek/Bro workers against a PF_RING ZC interface in node.cfg, write interface=pf_ring::<device> (for example pf_ring::zc:27 or pf_ring::dummy0) rather than just the bare device name like zc:27 or dummy0, so the PF_RING plugin is actually invoked instead of plain libpcap.
Careful
Getting PF_RING ZC load balancing to work reliably required routing traffic through dummy interfaces, which still passes packets through the kernel and may reduce the zero-copy benefit the setup is meant to provide.
From the thread · checked Oct 2026
I believe you need interface=pf_ring::zc:27
If you are using interface=zc:27 then you're just opening the zc: interfaces using libpcap.
I’ve double checked now and I’m able to start and all 20 threads are reported to be running in broctl.
The thread discusses creating a custom Zeek module to log SSH authentication attempts and trigger email notices. It was determined that the original issue stemmed from using an incorrect filename for loading modules and misunderstanding how record fields are initialized in events. Readers should ensure they use __load__.zeek for module loading, check for missing field checks before accessing record values, and verify SMTP configuration for live traffic notifications.
Unconfirmed
In a Zeek script that raises a NOTICE from the log_ssh event, the SSH::Info field auth_success is optional and may be unset (for unknown results), so code must check rec?$auth_success before reading it or Zeek will log a reporter error for every record where the field is missing.
Applies to
Zeek (also called Bro) user scripts that handle the log_ssh event and read SSH::Info$auth_success, version unknown, OS unknown
What to do
When writing an event handler for log_ssh that reads rec$auth_success to raise a NOTICE, first test with rec?$auth_success and handle the missing case separately, instead of assuming the field is always set.
From the thread · checked Oct 2026
Your other script is slightly broken because in the case of unknown result the field is not present, so your script needs to look like this.
if you look at your reporter.log you should see it filled with errors like this: Reporter::ERROR field value missing [SSH::rec$auth_success]
I made the changes you sent and I am getting this error on reporter.log.
zeek module creationnotice action configurationrecord field initializationlog stream setup
The thread discusses a race condition where the first new_connection event fires before a Python peer is ready to receive data via the Broker framework. Maintainers confirmed that updating to Zeek 6.0 resolves the timing issue, though they noted potential side effects with network_time() and infinite loops if message handling is misconfigured. Readers should upgrade to the latest development version and ensure their Python listener starts before Zeek to avoid connection failures.
Unconfirmed
When replaying a pcap with Zeek (-r mode) while using Brobroker's suspend_processing()/continue_processing() to delay event delivery, Zeek's broker manager can force network_time() to the current wall-clock time instead of the pcap's packet timestamps. This causes every packet in the trace to appear to create a brand-new, already-timed-out connection, producing repeated spurious new_connection and connection_state_remove events instead of one pair per real connection. Setting 'redef allow_network_time_forward=F' (or calling set_network_time() early) prevents the jump and restores the expected one new_connection/one connection_state_remove per flow.
Applies to
Zeek 6.0.0-dev (master) running in offline pcap mode (zeek -r) with a script that calls suspend_processing() in zeek_init() and continue_processing() on Broker::peer_added, used for Broker-based event export to an external (e.g. Python) peer; tested against the icsnpp-dnp3 example pcap
What to do
If you replay pcaps while using Broker suspend_processing()/continue_processing() to wait for a peer, add 'redef allow_network_time_forward=F;' (or call set_network_time(double_to_time(0.001)) in zeek_init) to stop Zeek from snapping network_time() to wall-clock time, which otherwise makes every packet look like a new, instantly-expired connection.
Careful
This disables Zeek's normal behavior of advancing network time to wall-clock when idle, so connection-related timers may stop expiring once the pcap is exhausted; the thread recommends manually forcing network_time() forward (e.g. in a Pcap::file_done handler) before terminating so pending timers still fire.
From the thread · checked Oct 2026
With the latest Zeek master version since yesterday (zeek version 6.0.0-dev.271), you can put the following into your zeek_init() as a workaround:
redef allow_network_time_forward=F will also work for you.
each individual packet from the pcap (which might be weeks, months or even years old) creates a new connection.
The thread discusses performance degradation and worker initialization failures in Zeek when using excessively long BPF filters to exclude large numbers of subnets or IPs. It was determined that the underlying pcap library struggles with compiling these complex filters, causing significant processing delays rather than a hard limit. Readers should expect slow startup times or stuck workers if they use very large inline BPF expressions and are advised to consider aggregating addresses into larger subnets or using NetControl for dynamic filtering.
Proposed, not merged
Zeek BPF filters with many 'or' clauses (hundreds of net/host entries) can cause pcap_compile() time to grow dramatically, stalling capture or workers on affected sensors.
Applies to
Zeek (version 4.0.5 reported), any OS, when using a single BPF filter string (-f) with several hundred 'or' terms (nets/hosts)
What to do
Avoid building huge BPF filters with hundreds of 'or' clauses for Zeek capture filters; aggregate IPs into larger subnets where possible, and watch for 'Kernel filter failed: Cannot allocate memory' or stalled pcap_compile() as symptoms. A GitHub issue was opened to track the underlying problem but no fix has landed yet.
Careful
The suggested debug patch sets BPF optimize to false, which is a build-time code change for testing only, not a supported deployment fix.
From the thread · checked Oct 2026
I just did a quick experiment with a script that creates progressively larger filters and the processing time of a small pcap deteriorates horribly.
gdb says these things are stuck in pcap_compile() , which fits.
Not sure what we can do here but I’ll create a ticket so we can look into it further.
The thread discusses upgrading Zeek from version 6.0.4 to 7.0.5, highlighting potential issues with the broker library and log schema compatibility. It was determined that using a separate test instance or containerized environment helps identify discrepancies, and setting the PYTHONPATH to the Zeek installation's Python directory resolves broker import errors. Readers should expect to verify custom scripts against new versions and use tools like zeek/logschema to manage log file changes.
Confirmed in the thread
When using Zeek's Python broker bindings, installing broker via pip can produce an 'Endpoint not found' error. Pointing PYTHONPATH at the Zeek installation's own lib/zeek/python directory instead of the pip package resolves it.
Applies to
Zeek 7.1.0 (issue also seen on 7.0.5), Python broker bindings, broker installed via pip
What to do
If Python broker scripts fail with 'Endpoint not found' after upgrading Zeek, skip the pip-installed broker package and set PYTHONPATH to the Zeek install's lib/zeek/python directory instead.
From the thread · checked Oct 2026
Instead of using broker from pip or compiling it by hand, could you adapt PYTHONPATH for test-broker.py to point to your Zeek 7.1 installation’s lib/zeek/python directory?
I sure can, thanks for the tip! I am working on getting the broker to work in c++ but writing zeek scripts using the broker works fine as well now.
The thread discusses filtering specific IPs and subnets from Zeek logs using either BPF filters to drop traffic before processing or log_policy hooks to exclude entries after processing. It was determined that restrict_filters requires correct BPF syntax (e.g., 'vlan and not host') to avoid capture loss, while log_policy hooks offer a more flexible way to filter conn.log without restarting Zeek. Readers should verify their BPF syntax carefully to prevent traffic drops or use the configuration framework for dynamic IP exclusion in log_policy scripts.
Confirmed in the thread
A BPF-based packet filter set via PacketFilter::default_capture_filter or restrict_filters in local.zeek can drop traffic to or from a specific host before Zeek processes it, so that host never appears in conn.log.
Applies to
Zeek script config (local.zeek) using PacketFilter::default_capture_filter or restrict_filters; tested by replaying a pcap file with zeek -C -r against a local policy script
What to do
Add a BPF restriction such as 'not host <ip>' to default_capture_filter or restrict_filters in local.zeek, then verify the effective filter in packet_filter.log and confirm behavior by replaying traffic with tcpdump or a test pcap before relying on it in production.
Careful
This drops the matched traffic from capture entirely, not just from conn.log, so Zeek will have no record of it in any log. On VLAN-tagged traffic the filter syntax must group terms correctly (e.g. 'vlan and (not net ...)'), since a wrong filter construction can silently blackhole all traffic and show 0% CPU use with no logs written.
Zeek outputs connection records for 2 hosts and ignores the third that is filtered out by the PCAP.
Verify the effective BPF filter in packet_filter.log, and also possible to run the filter against live traffic or PCAP with tcpdump(8) to test assumptions.
The thread discusses allowing Zeek event handlers to use a subset of parameters by name, which helps maintainers deprecate or change event signatures without breaking existing scripts. This approach was validated as a net positive for long-term script reliability and optimization, despite some concerns about syntax clarity. Readers should expect that event handler parameter lists can now omit unused fields if the remaining names match the declaration.
Disputed
A proof-of-concept patch (PR #262) proposes letting Zeek event and hook handlers declare only a subset of an event's parameters, matched by name, so new parameters can be added to an event without breaking existing handler scripts.
Applies to
Zeek scripting language event and hook handler declarations (not plain functions); version and OS not stated
What to do
Treat this as a design proposal only. Do not assume Zeek supports partial-parameter event handlers; check current Zeek release notes or documentation before relying on name-based parameter matching for event handlers.
Careful
The patch changes event handler type-checking from strict positional matching to optional name-based matching, which several participants argue makes code harder to read and could silently mismatch parameters if semantics change without renaming.
From the thread · checked Oct 2026
Just wanted to draw more attention/feedback to a proof-of-concept patch I just made
One can still pick their own parameter names as long as they strictly follow the declaration's parameter order.
I think compatibility is a growing issue with scripts being released as plugins.
The thread discusses installing Zeek on Kali Linux by compiling from source due to incompatible binary packages. A maintainer validated building from source as the correct approach and confirmed that reducing parallelism or increasing memory resolves compiler kill errors, while a contributor noted that Debian testing binaries are the only supported prebuilt option for Kali. Readers should compile Zeek from source using the provided dependency commands and ensure the installation path is correctly added to the superuser's secure_path in visudo to avoid command not found errors.
Confirmed in the thread
On Kali Linux, Zeek has no official binary packages; installing with apt pulls an outdated or broken package, so users must build Zeek from source instead.
Applies to
Zeek installation on Kali Linux (binary/apt install vs. build from source)
What to do
Do not rely on apt install zeek on Kali Linux. Remove any added Zeek apt repo, then follow the Zeek 'Building from Source' instructions instead. If compilation dies with an OOM-style error, reduce make -j parallelism or give the VM more memory (roughly 2-4GB per CPU for GCC).
Careful
Building from source skips Zeek's own package dependency checks, so you must manually manage build dependencies and runtime PATH/sudo secure_path settings yourself.
From the thread · checked Oct 2026
we do not provide binary packages for Kali linux - so you probably have to compile it from source if things do not work.
The Debian testing binary packages (and only the debian testing ones) have a good chance of working on Kali.
I have removed the repo from sources.list.d and like you mentioned, am unable to install with apt
zeek installationkali linuxcompiling from sourceoom errors
Threads are ranked by how much they teach, not by date, from whichever source
carried them. Commands are shown as
posted, unrun, with the year they were written; a flag may have changed since.
Posters appear by role only.
Score card
Shipping velocityreleases a month, last 12 months
Documentation qualityrelease-notes rubric, 0–100
Breaking-change disciplinehow rarely a release breaks users, and notice given
Maintenance riskquiet time against its own cadence, maintainers
Innovation & surfacenew capabilities, API and MCP surface
Community health
Contributor trenddistinct committers, this year against last
Maintainer concentrationbus factor now against a year ago
Issue backlog trendissues closed per issue opened, 12 months
Responsivenessmedian time to a maintainer’s first reply
Nine scores for Zeek, each built from the releases, notes and API history this site tracks — and, on Researcher and Business, where it stands among every measured tool in its category and how that has moved.
Each score is 0–100 on a published rubric, derived from data this site already shows.
A dimension we cannot measure says so — it is never scored 0 and never enters a rank.
How this is scored
Shipping velocity — releases a month over the last 12 months, on a log scale where 16 a month scores 100. Needs 3 releases in the window.
Documentation quality — the release-notes rubric published on the analytics page, unchanged.
Breaking-change discipline — the share of releases carrying a breaking change (none scores 100, half or more scores 0). Only projects that label breaking changes are measured: a clean record cannot be told from an unlabelled one.
Maintenance risk — quiet time measured against the tool's own release cadence (quiet longer than 90 days and three typical gaps scores 0), plus the number of active maintainers and whether contributors are growing, where known. Higher is lower risk.
Innovation & surface — new capabilities in the feature ledger this year, API and MCP operations added, and the share of commits that are features: the mean of whichever we hold.
Community health (open-source tools only) — each is a direction, not a size: contributors this year against last, the bus factor now against a year ago, and issues closed per issue opened, where steady scores 50, doubled 100 and halved 0; plus the median time to a maintainer's first reply (an hour scores about 100, a month or more 0). A commercial card has no repository and carries none of the four.
Documented delivery (commercial tools) — when a vendor's documented new capabilities have slowed against its own baseline, that counts against the overall standing as heavily as two low dimensions. Steady delivery, or too little history to judge, leaves the standing alone; it is never a sixth score.
Open-source tools are scored on repository signals; commercial tools on their published changelog. Ranks compare tools within one category and one profile and need at least five measured peers; the overall standing needs three ranked dimensions. Best-in-breed or consolidator is a shape, not a quality, and is never scored.
Release-note detail over time
See how much detail Zeek puts in its release notes, quarter by quarter, and compare it with tracked tools in the same category. This history uses up to ten retained, reviewed notes per tool; sparse or blank older quarters may reflect that limit.
Issue, contributor and maintainer activity in zeek/zeek, 2023-10 – 2026-09,
as of 2026-09-25. Twelve-month figures first; the trend lines run
the whole window.
Contributors58+15 vs prior 12 months
Maintainers7+4 joined · −1 left, last 12 months
Bus factor2committers behind half the commits
Community-filed52%of issues opened, last 12 months
Median time to close22 daysfirst maintainer reply 37 hours
Open backlog238of 1,839 issues ever filed
Issues opened / month2 · 4communitymaintainers
Open backlog238
Contributors / month9
Commits / month52
Stars7,964
Issue themes, last 12 months
docs 6%
other 94%
Counts from the project's public repository and git history; no individuals
are identified. Maintainers are the committers covering 80% of the last year's
commits. how we measure this
Libraries its release ships
What its latest release locks, checked against known advisories.
None of its release's images build from a lockfile we can read.
Add the badge to your README
Maintain this project? The badge links readers straight to this page, so they can
follow every release here.