PAGES
← all tools
◆ Network Analysis & Monitoring

Zeek

v9.0.0 open-source

Zeek is a network security monitor and framework for network traffic analysis and security monitoring.

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.

How Zeek helps

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

all 54 features, with the evidence for each →

Languages

Not documented

Features

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.

Compare with peers →

  • Zeek covers 1 of the 5 network observation capabilities we track.
  • Zeek covers 6 of the 34 network analysis capabilities we track.

What Zeek offers you

  • Command-line interface6
  • Scripting API5
  • Scripting language support5
  • Plugin API support3
  • Plugin system2
  • Agent-based deployment1
  • JavaScript scripting support1
Network traffic analysis 20 features Network observation since 2019
Packet analysis plugin framework shipped Allows 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 analysis shipped Parses 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). Zeek screenshot 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 analysis shipped Parses 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 analysis shipped Parses 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. Zeek screenshot 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_code notify. 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 logs shipped Reads 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 limits shipped Provides 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 analysis shipped Parses 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. Zeek screenshot 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 analysis shipped Parses 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. Zeek screenshot 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.log version 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 analysis shipped Parses 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. Zeek screenshot 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 ingestion shipped Receives 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. Zeek screenshot 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 analysis shipped Parses 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 analysis shipped Parses 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. Zeek screenshot 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 analysis shipped Parses 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. Zeek screenshot 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 analysis shipped Parses 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 analysis shipped Parses 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 analysis shipped Parses 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 analysis shipped Parses 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 analysis shipped Parses 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 analysis shipped Parses 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 analysis shipped Parses 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
Protocol dissection (decoding packets) 6 features Network analysis since 2019
SMB protocol analysis shipped Parses SMB1 and SMB2/3 traffic, exposing protocol events and structured logging for SMB activity. 9 releases · 1 other source · first seen Jul 2019

Shared capability: Protocol dissection (decoding packets)

release 9 total

  • 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 analysis shipped Parses 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

Shared capability: Protocol dissection (decoding packets)

release 8 total

  • Extends the LDAP analyzer to forward SASL payloads to GSSAPI and NTLM parsers, enhancing logging into ntlm.log and kerberos.log. Zeek screenshot 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 analysis shipped Parses NTLM traffic including challenge and response fields. 3 releases · first seen Feb 2023

Shared capability: Protocol dissection (decoding packets)

release

  • Extends the LDAP analyzer to forward SASL payloads to GSSAPI and NTLM parsers, enhancing logging into ntlm.log and kerberos.log. Zeek screenshot 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 analysis shipped Parses 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

Shared capability: Protocol dissection (decoding packets)

release

  • Supports TCP in the Syslog analyzer. Zeek screenshot 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 limiting shipped Limits the depth of nested MIME entity parsing and generates a warning event when the configured limit is reached. 1 release · first seen Jan 2024

Shared capability: Protocol dissection (decoding packets)

release

  • 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 analysis shipped Parses MOUNT3 protocol traffic and exposes associated events, with manual port or DPD registration required. 1 release · first seen Jul 2019

Shared capability: Protocol dissection (decoding packets)

release

  • 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 extensions 6 features Network analysis since 2019
Scripting language shipped Provides 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. Zeek screenshot 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 API shipped Exposes 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. Zeek screenshot 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 execution shipped Runs 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 support shipped Allows 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 introspection shipped Provides 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 exposure shipped Provides 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 feature Network analysis since 2020
Live network traffic monitoring shipped Captures 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
Network traffic logging 1 feature Network analysis since 2024
Unknown IP protocol connection logging shipped Logs 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 generation 1 feature Network analysis since 2026
PCAP file generation verified Generates 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

Shared capability: Packet crafting and generation

Also counts toward: Command-line interface

command line

New protocol support (added dissectors) 1 feature Network analysis since 2026
ZIP file analysis shipped Maps 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. Zeek screenshot 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 classified 18 features Features we have not matched to a capability yet. A suggested match is marked.
Broker communication framework shipped Provides 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 export shipped Exposes 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 management shipped Provides 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.⁠︀︄︇︀︅︉︀︅︀︀︃︀︀︅︅︀︅︊︀︄︆︀︃︄⁠ Zeek screenshot 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 configuration shipped suggested Allows 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 framework shipped Manages 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. Zeek screenshot 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 distribution shipped Provides 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 integration shipped suggested Bundles 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 transport shipped Provides 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. Zeek screenshot 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 client shipped Provides 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 tracking shipped suggested Provides 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 framework shipped Provides 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 support shipped Provides 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. Zeek screenshot 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 support shipped Extends 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 configuration shipped Allows 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 hashing shipped suggested Adds 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 access shipped suggested Provides 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 profiling shipped suggested Records 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 backend shipped Writes 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.

Screenshots

From the release notes, newest first. Click one to see it full size.

Conversation

community.zeek.org · since 2010 · active

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.

2017

bro and pf_ring zc configuration success stories

community.zeek.org · 19 messages · maintainercommunity

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.
pf_ringzerocopyload_balancingconfiguration
2019

Creating a module and accessing an event in another script

community.zeek.org · 20 messages · maintainercontributorcommunity

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
2023

Connection/flow not detected in new_connection but in connection_state_remove

community.zeek.org · 20 messages · maintainercommunity

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.
zeek-brokerpcap-processingevent-timingpython-integration
2022

Zeek BPF Limitations

community.zeek.org · 18 messages · maintainercommunity

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.
bpfperformanceconfiguration
2025

What to Watch For When Upgrading Zeek from 6.0.4 to 7.0.5

community.zeek.org · 11 messages · contributorcommunity

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.
upgradebrokerpythonlogschema
2021

Filter IPs and subnets from conn.log using log_policy hooks or restrict_filters

community.zeek.org · 12 messages · maintainercontributorcommunity

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.
From the thread · checked Oct 2026
redef PacketFilter::default_capture_filter = “not host 10.0.15.2”;
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.
zeeklog-filteringbpfconfiguration
2019

support for event handlers using a subset of parameters

community.zeek.org · 20 messages · maintainercommunity

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.
zeek scriptingevent handlersapi compatibilityparameter matching
2022

Installation issues on Kali linux

community.zeek.org · 20 messages · maintainercontributorcommunity

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

  1. Shipping velocity releases a month, last 12 months
  2. Documentation quality release-notes rubric, 0–100
  3. Breaking-change discipline how rarely a release breaks users, and notice given
  4. Maintenance risk quiet time against its own cadence, maintainers
  5. Innovation & surface new capabilities, API and MCP surface
  6. Community health
  7. Contributor trend distinct committers, this year against last
  8. Maintainer concentration bus factor now against a year ago
  9. Issue backlog trend issues closed per issue opened, 12 months
  10. Responsiveness median 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.

Score cards are part of every paid plan.

See plans →

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.

Checking release-note history…

Explore the full chart →

Releases

Show

43 entries

  1. September 20262
  2. August 20262
  3. July 20262
  4. May 20262
  5. December 20252
  6. October 20251
  7. August 20252
  8. July 20252
  9. April 20251
  10. December 20241
  11. September 20241
  12. July 20241
  13. May 20242
  14. February 20241
  15. January 20241
  16. October 20232
  17. September 20232
  18. May 20231
  19. April 20232
  20. February 20233
  21. September 20221
  22. June 20221
  23. January 20221
  24. August 20212
  25. December 20201
  26. July 20201
  27. February 20201
  28. September 20191
  29. July 20191
    Show

    43 entries

    Project health

    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.

    1. Contributors 58 +15 vs prior 12 months
    2. Maintainers 7 +4 joined · −1 left, last 12 months
    3. Bus factor 2 committers behind half the commits
    4. Community-filed 52% of issues opened, last 12 months
    5. Median time to close 22 days first maintainer reply 37 hours
    6. Open backlog 238 of 1,839 issues ever filed
    1. Issues opened / month 2 · 4 communitymaintainers
    2. Open backlog 238
    3. Contributors / month 9
    4. Commits / month 52
    5. Stars 7,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.

    Tracked by Cyber Toolchain Choose a badge style and copy the code →
    browse all tools → score card for your toolchain →