Documentation

Message
in package

FinalYes

This class represents an outgoing query message or an incoming response message

Tags
link
https://tools.ietf.org/html/rfc1035#section-4.1.1

Table of Contents

Constants

CLASS_IN  = 1
OPCODE_IQUERY  = 1
OPCODE_QUERY  = 0
OPCODE_STATUS  = 2
OPT_PADDING  = 12
The EDNS(0) Padding Option
OPT_TCP_KEEPALIVE  = 11
The edns-tcp-keepalive EDNS0 Option
RCODE_FORMAT_ERROR  = 1
RCODE_NAME_ERROR  = 3
RCODE_NOT_IMPLEMENTED  = 4
RCODE_OK  = 0
RCODE_REFUSED  = 5
RCODE_SERVER_FAILURE  = 2
TYPE_A  = 1
TYPE_AAAA  = 28
TYPE_ANY  = 255
TYPE_CAA  = 257
TYPE_CNAME  = 5
TYPE_MX  = 15
TYPE_NS  = 2
TYPE_OPT  = 41
pseudo-type for EDNS0
TYPE_PTR  = 12
TYPE_SOA  = 6
TYPE_SPF  = 99
Sender Policy Framework (SPF) had a dedicated SPF type which has been deprecated in favor of reusing the existing TXT type.
TYPE_SRV  = 33
TYPE_SSHFP  = 44
TYPE_TXT  = 16

Properties

$aa  : bool
$additional  : array<string|int, Record>
$answers  : array<string|int, Record>
$authority  : array<string|int, Record>
$id  : int
The 16 bit message ID
$opcode  : int
$qr  : bool
$questions  : array<string|int, Query>
An array of Query objects
$ra  : bool
$rcode  : int
$rd  : bool
$tc  : bool

Methods

createRequestForQuery()  : self
Creates a new request message for the given query
createResponseWithAnswersForQuery()  : self
Creates a new response message for the given query with the given answer records
generateId()  : int
generates a random 16 bit message ID

Constants

OPCODE_IQUERY

public mixed OPCODE_IQUERY = 1

OPCODE_QUERY

public mixed OPCODE_QUERY = 0

OPCODE_STATUS

public mixed OPCODE_STATUS = 2

OPT_TCP_KEEPALIVE

The edns-tcp-keepalive EDNS0 Option

public mixed OPT_TCP_KEEPALIVE = 11

Option value contains a ?float with timeout in seconds (in 0.1s steps) for DNS response or null for DNS query.

Tags
link
https://tools.ietf.org/html/rfc7828

RCODE_FORMAT_ERROR

public mixed RCODE_FORMAT_ERROR = 1

RCODE_NAME_ERROR

public mixed RCODE_NAME_ERROR = 3

RCODE_NOT_IMPLEMENTED

public mixed RCODE_NOT_IMPLEMENTED = 4

RCODE_REFUSED

public mixed RCODE_REFUSED = 5

RCODE_SERVER_FAILURE

public mixed RCODE_SERVER_FAILURE = 2

TYPE_AAAA

public mixed TYPE_AAAA = 28

TYPE_ANY

public mixed TYPE_ANY = 255

TYPE_CAA

public mixed TYPE_CAA = 257

TYPE_CNAME

public mixed TYPE_CNAME = 5

TYPE_OPT

pseudo-type for EDNS0

public mixed TYPE_OPT = 41

These are included in the additional section and usually not in answer section. Defined in RFC 6891 (or older RFC 2671).

The OPT record uses the "class" field to store the maximum size.

The OPT record uses the "ttl" field to store additional flags.

TYPE_SPF

Sender Policy Framework (SPF) had a dedicated SPF type which has been deprecated in favor of reusing the existing TXT type.

https://datatracker.ietf.org/doc/html/rfc7208#section-3.1

public mixed TYPE_SPF = 99
Tags
see
self::TYPE_TXT

TYPE_SSHFP

public mixed TYPE_SSHFP = 44

Properties

$aa

public bool $aa = false

Authoritative Answer

$additional

public array<string|int, Record> $additional = array()

$id

The 16 bit message ID

public int $id = 0

The response message ID has to match the request message ID. This allows the receiver to verify this is the correct response message. An outside attacker may try to inject fake responses by "guessing" the message ID, so this should use a proper CSPRNG to avoid possible cache poisoning.

16 bit message ID

Tags
see
self::generateId()

$opcode

public int $opcode = self::OPCODE_QUERY

specifies the kind of query (4 bit), see self::OPCODE_* constants

Tags
see
self::OPCODE_QUERY

$qr

public bool $qr = false

Query/Response flag, query=false or response=true

$questions

An array of Query objects

public array<string|int, Query> $questions = array()
$questions = array(
    new Query(
        'reactphp.org',
        Message::TYPE_A,
        Message::CLASS_IN
    )
);

$ra

public bool $ra = false

Recursion Available

$rcode

public int $rcode = \React\Dns\Model\Message::RCODE_OK

response code (4 bit), see self::RCODE_* constants

Tags
see
self::RCODE_OK

$rd

public bool $rd = false

Recursion Desired

$tc

public bool $tc = false

TrunCation

Methods

createRequestForQuery()

Creates a new request message for the given query

public static createRequestForQuery(Query $query) : self
Parameters
$query : Query
Return values
self

createResponseWithAnswersForQuery()

Creates a new response message for the given query with the given answer records

public static createResponseWithAnswersForQuery(Query $query, array<string|int, Record$answers) : self
Parameters
$query : Query
$answers : array<string|int, Record>
Return values
self

generateId()

generates a random 16 bit message ID

private static generateId() : int

This uses a CSPRNG so that an outside attacker that is sending spoofed DNS response messages can not guess the message ID to avoid possible cache poisoning attacks.

The random_int() function is only available on PHP 7+ or when https://github.com/paragonie/random_compat is installed. As such, using the latest supported PHP version is highly recommended. This currently falls back to a less secure random number generator on older PHP versions in the hope that this system is properly protected against outside attackers, for example by using one of the common local DNS proxy stubs.

Tags
see
self::getId()
codeCoverageIgnore
Return values
int

        
On this page

Search results