Making DNS Messages

dns.message.from_file(f, idna_codec=None, one_rr_per_rrset=False)[source]

Read the next text format message from the specified file.

Message blocks are separated by a single blank line.

f, a file or str. If f is text, it is treated as the pathname of a file to open.

idna_codec, a dns.name.IDNACodec, specifies the IDNA encoder/decoder. If None, the default IDNA 2003 encoder/decoder is used.

one_rr_per_rrset, a bool. If True, then each RR is put into its own rrset. The default is False.

Raises dns.message.UnknownHeaderField if a header is unknown.

Raises dns.exception.SyntaxError if the text is badly formed.

Returns a dns.message.Message object

dns.message.from_text(text, idna_codec=None, one_rr_per_rrset=False, origin=None, relativize=True, relativize_to=None)[source]

Convert the text format message into a message object.

The reader stops after reading the first blank line in the input to facilitate reading multiple messages from a single file with dns.message.from_file().

text, a str, the text format message.

idna_codec, a dns.name.IDNACodec, specifies the IDNA encoder/decoder. If None, the default IDNA 2003 encoder/decoder is used.

one_rr_per_rrset, a bool. If True, then each RR is put into its own rrset. The default is False.

origin, a dns.name.Name (or None), the origin to use for relative names.

relativize, a bool. If true, name will be relativized.

relativize_to, a dns.name.Name (or None), the origin to use when relativizing names. If not set, the origin value will be used.

Raises dns.message.UnknownHeaderField if a header is unknown.

Raises dns.exception.SyntaxError if the text is badly formed.

Returns a dns.message.Message object

dns.message.from_wire(wire, keyring=None, request_mac=b'', xfr=False, origin=None, tsig_ctx=None, multi=False, question_only=False, one_rr_per_rrset=False, ignore_trailing=False, raise_on_truncation=False)[source]

Convert a DNS wire format message into a message object.

keyring, a dns.tsig.Key or dict, the key or keyring to use if the message is signed.

request_mac, a bytes. If the message is a response to a TSIG-signed request, request_mac should be set to the MAC of that request.

xfr, a bool, should be set to True if this message is part of a zone transfer.

origin, a dns.name.Name or None. If the message is part of a zone transfer, origin should be the origin name of the zone. If not None, names will be relativized to the origin.

tsig_ctx, a dns.tsig.HMACTSig or dns.tsig.GSSTSig object, the ongoing TSIG context, used when validating zone transfers.

multi, a bool, should be set to True if this message is part of a multiple message sequence.

question_only, a bool. If True, read only up to the end of the question section.

one_rr_per_rrset, a bool. If True, put each RR into its own RRset.

ignore_trailing, a bool. If True, ignore trailing junk at end of the message.

raise_on_truncation, a bool. If True, raise an exception if the TC bit is set.

Raises dns.message.ShortHeader if the message is less than 12 octets long.

Raises dns.message.TrailingJunk if there were octets in the message past the end of the proper DNS message, and ignore_trailing is False.

Raises dns.message.BadEDNS if an OPT record was in the wrong section, or occurred more than once.

Raises dns.message.BadTSIG if a TSIG record was not the last record of the additional data section.

Raises dns.message.Truncated if the TC flag is set and raise_on_truncation is True.

Returns a dns.message.Message.

dns.message.make_query(qname, rdtype, rdclass=<RdataClass.IN: 1>, use_edns=None, want_dnssec=False, ednsflags=None, payload=None, request_payload=None, options=None, idna_codec=None)[source]

Make a query message.

The query name, type, and class may all be specified either as objects of the appropriate type, or as strings.

The query will have a randomly chosen query id, and its DNS flags will be set to dns.flags.RD.

qname, a dns.name.Name or str, the query name.

rdtype, an int or str, the desired rdata type.

rdclass, an int or str, the desired rdata class; the default is class IN.

use_edns, an int, bool or None. The EDNS level to use; the default is None (no EDNS). See the description of dns.message.Message.use_edns() for the possible values for use_edns and their meanings.

want_dnssec, a bool. If True, DNSSEC data is desired.

ednsflags, an int, the EDNS flag values.

payload, an int, is the EDNS sender’s payload field, which is the maximum size of UDP datagram the sender can handle. I.e. how big a response to this message can be.

request_payload, an int, is the EDNS payload size to use when sending this message. If not specified, defaults to the value of payload.

options, a list of dns.edns.Option objects or None, the EDNS options.

idna_codec, a dns.name.IDNACodec, specifies the IDNA encoder/decoder. If None, the default IDNA 2003 encoder/decoder is used.

Returns a dns.message.QueryMessage

dns.message.make_response(query, recursion_available=False, our_payload=8192, fudge=300, tsig_error=0)[source]

Make a message which is a response for the specified query. The message returned is really a response skeleton; it has all of the infrastructure required of a response, but none of the content.

The response’s question section is a shallow copy of the query’s question section, so the query’s question RRsets should not be changed.

query, a dns.message.Message, the query to respond to.

recursion_available, a bool, should RA be set in the response?

our_payload, an int, the payload size to advertise in EDNS responses.

fudge, an int, the TSIG time fudge.

tsig_error, an int, the TSIG error.

Returns a dns.message.Message object whose specific class is appropriate for the query. For example, if query is a dns.update.UpdateMessage, response will be too.