base/protocols/dns/main.zeek
- DNS
Base DNS analysis script which tracks and logs DNS queries along with their responses.
- Namespace:
DNS
- Imports:
base/protocols/conn/removal-hooks.zeek, base/protocols/dns/consts.zeek, base/utils/queue.zeek
Summary
Runtime Options
Give up trying to match pending DNS queries or replies for a given query/transaction ID once this number of unmatched queries or replies is reached (this shouldn’t happen unless either the DNS server/resolver is broken, Zeek is not seeing all the DNS traffic, or an AXFR query response is ongoing). |
|
Give up trying to match pending DNS queries or replies across all query/transaction IDs once there is at least one unmatched query or reply across this number of different query IDs. |
Redefinable Options
Well-known ports for DNS traffic. |
Types
The record type which contains the column fields of the DNS log. |
|
Yields a queue of |
|
A record type which tracks the status of DNS queries for a given
|
Redefinitions
The DNS logging stream identifier. |
|
|
Events
An event that can be handled to access the |
Hooks
This is called by the specific dns_*_reply events with a “reply” which may not represent the full data available from the resource record, but it’s generally considered a summarization of the responses. |
|
DNS finalization hook. |
|
A default logging policy hook for the stream. |
|
A hook that is called whenever a session is being set. |
Detailed Interface
Runtime Options
- DNS::max_pending_msgs
-
Give up trying to match pending DNS queries or replies for a given query/transaction ID once this number of unmatched queries or replies is reached (this shouldn’t happen unless either the DNS server/resolver is broken, Zeek is not seeing all the DNS traffic, or an AXFR query response is ongoing).
- DNS::max_pending_query_ids
-
Give up trying to match pending DNS queries or replies across all query/transaction IDs once there is at least one unmatched query or reply across this number of different query IDs.
Redefinable Options
- DNS::ports
-
Well-known ports for DNS traffic.
Types
- DNS::Info
- Type:
- Fields:
-
ts:
time&log The earliest time at which a DNS protocol message over the associated connection is observed.
-
uid:
string&log A unique identifier of the connection over which DNS messages are being transferred.
-
proto:
transport_proto&log The transport layer protocol of the connection.
-
trans_id:
count&log&optional A 16-bit identifier assigned by the program that generated the DNS query. Also used in responses to match up replies to outstanding queries.
-
rtt:
interval&log&optional Round trip time for the query and response. This indicates the delay between when the request was seen until the answer started.
-
AA:
bool&log&default=F&optional The Authoritative Answer bit for response messages specifies that the responding name server is an authority for the domain name in the question section.
-
RD:
bool&log&default=F&optional The Recursion Desired bit in a request message indicates that the client wants recursive service for this query.
-
RA:
bool&log&default=F&optional The Recursion Available bit in a response message indicates that the name server supports recursive queries.
-
Z:
count&log&default=0&optional A reserved field that is zero in queries and responses unless using DNSSEC. This field represents the 3-bit Z field using the specification from RFC 1035.
-
TTLs:
vectorofinterval&log&optional The caching intervals of the associated RRs described by the answers field.
-
total_answers:
count&optional The total number of resource records in a reply message’s answer section.
-
total_replies:
count&optional The total number of resource records in a reply message’s answer, authority, and additional sections.
-
auth:
set[string]&log&optional (present if policy/protocols/dns/auth-addl.zeek is loaded)
Authoritative responses for the query.
-
addl:
set[string]&log&optional (present if policy/protocols/dns/auth-addl.zeek is loaded)
Additional responses for the query.
-
original_query:
string&log&optional (present if policy/protocols/dns/log-original-query-case.zeek is loaded)
Query with original letter casing
-
ts:
The record type which contains the column fields of the DNS log.
- DNS::PendingMessages
- Type:
table[count] ofQueue::Queue
Yields a queue of
DNS::Infoobjects for a given DNS message query/transaction ID.
- DNS::State
- Type:
- Fields:
-
pending_query:
DNS::Info&optional A single query that hasn’t been matched with a response yet. Note this is maintained separate from the pending_queries field solely for performance reasons – it’s possible that pending_queries contains further queries for which a response has not yet been seen, even for the same transaction ID.
-
pending_queries:
DNS::PendingMessages&optional Indexed by query id, returns Info record corresponding to queries that haven’t been matched with a response yet.
-
pending_replies:
DNS::PendingMessages&optional Indexed by query id, returns Info record corresponding to replies that haven’t been matched with a query yet.
-
pending_query:
A record type which tracks the status of DNS queries for a given
connection.
Events
- DNS::log_dns
-
An event that can be handled to access the
DNS::Inforecord as it is sent to the logging framework.
Hooks
- DNS::do_reply
- Type:
hook(c:connection, msg:dns_msg, ans:dns_answer, reply:string) :bool
This is called by the specific dns_*_reply events with a “reply” which may not represent the full data available from the resource record, but it’s generally considered a summarization of the responses.
- Parameters:
c – The connection record for which to fill in DNS reply data.
msg – The DNS message header information for the response.
ans – The general information of a RR response.
reply – The specific response information according to RR type/class.
- DNS::finalize_dns
- Type:
DNS finalization hook. Remaining DNS info may get logged when it’s called.
- DNS::log_policy
- Type:
A default logging policy hook for the stream.
- DNS::set_session
- Type:
hook(c:connection, msg:dns_msg, is_query:bool) :bool
A hook that is called whenever a session is being set. This can be used if additional initialization logic needs to happen when creating a new session value.
- Parameters:
c – The connection involved in the new session.
msg – The DNS message header information.
is_query – Indicator for if this is being called for a query or a response.