Class DnsMessage

java.lang.Object
org.minidns.dnsmessage.DnsMessage

public class DnsMessage extends Object
A DNS message as defined by RFC 1035. The message consists of a header and 4 sections: question, answer, nameserver and addition resource record section. A message can either be parsed (DnsMessage(byte[])) or serialized (toArray()).
See Also:
  • Field Details

    • id

      public final int id
      The DNS message id.
    • opcode

      public final DnsMessage.OPCODE opcode
      The DNS message opcode.
    • responseCode

      public final DnsMessage.RESPONSE_CODE responseCode
      The response code of this dns message.
    • qr

      public final boolean qr
      The QR flag of the DNS message header. Note that this will be true if the message is a response and false if it is a query.
      See Also:
    • authoritativeAnswer

      public final boolean authoritativeAnswer
      True if this is a authorative response. If set, the responding nameserver is an authority for the domain name in the question section. Note that the answer section may have multiple owner names because of aliases. This flag corresponds to the name which matches the query name, or the first owner name in the query section.
      See Also:
    • truncated

      public final boolean truncated
      True if message is truncated. Then TCP should be used.
    • recursionDesired

      public final boolean recursionDesired
      True if the server should recurse.
    • recursionAvailable

      public final boolean recursionAvailable
      True if recursion is possible.
    • authenticData

      public final boolean authenticData
      True if the server regarded the response as authentic.
    • checkingDisabled

      public final boolean checkingDisabled
      True if the server should not perform DNSSEC validation before returning the result.
    • questions

      public final List<Question> questions
      The question section content. Usually there will be only one question.

      This list is unmodifiable.

    • answerSection

      public final List<Record<? extends Data>> answerSection
      The answers section records. Note that it is not guaranteed that all records found in this section will be direct answers to the question in the query. If DNSSEC is used, then this section also contains the RRSIG record.

      This list is unmodifiable.

    • authoritySection

      public final List<Record<? extends Data>> authoritySection
      The Authority Section. Note that it is not guaranteed that this section only contains nameserver records. If DNSSEC is used, then this section could also contain a NSEC(3) record.

      This list is unmodifiable.

    • additionalSection

      public final List<Record<? extends Data>> additionalSection
      The additional section. It eventually contains RRs which relate to the query.

      This list is unmodifiable.

    • optRrPosition

      public final int optRrPosition
    • receiveTimestamp

      public final long receiveTimestamp
      The receive timestamp. Set only if this message was created via parse. This should be used to evaluate TTLs.
  • Constructor Details

    • DnsMessage

      protected DnsMessage(DnsMessage.Builder builder)
    • DnsMessage

      public DnsMessage(byte[] data) throws IOException
      Build a DNS Message based on a binary DNS message.
      Parameters:
      data - The DNS message data.
      Throws:
      IOException - On read errors.
  • Method Details

    • toArray

      public byte[] toArray()
      Generate a binary dns packet out of this message.
      Returns:
      byte[] the binary representation.
    • asDatagram

      public DatagramPacket asDatagram(InetAddress address, int port)
    • writeTo

      public void writeTo(OutputStream outputStream) throws IOException
      Throws:
      IOException
    • writeTo

      public void writeTo(OutputStream outputStream, boolean writeLength) throws IOException
      Throws:
      IOException
    • getInByteBuffer

      public ByteBuffer getInByteBuffer()
    • calculateHeaderBitmap

      int calculateHeaderBitmap()
    • getQuestion

      public Question getQuestion()
    • copyQuestions

      public List<Question> copyQuestions()
      Copy the questions found in the question section.
      Returns:
      a copy of the question section questions.
      See Also:
    • copyAnswers

      public List<Record<? extends Data>> copyAnswers()
      Copy the records found in the answer section into a new list.
      Returns:
      a copy of the answer section records.
      See Also:
    • copyAuthority

      public List<Record<? extends Data>> copyAuthority()
      Copy the records found in the authority section into a new list.
      Returns:
      a copy of the authority section records.
      See Also:
    • getEdns

      public Edns getEdns()
    • getOptPseudoRecord

      public Record<OPT> getOptPseudoRecord()
    • isDnssecOk

      public boolean isDnssecOk()
      Check if the EDNS DO (DNSSEC OK) flag is set.
      Returns:
      true if the DO flag is set.
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • asTerminalOutput

      public String asTerminalOutput()
      Format the DnsMessage object in a way suitable for terminal output. The format is loosely based on the output provided by dig.
      Returns:
      This message as a String suitable for terminal output.
    • getAnswersFor

      public <D extends Data> Set<D> getAnswersFor(Question q)
    • getAnswersMinTtl

      public long getAnswersMinTtl()
      Get the minimum TTL from all answers in seconds.
      Returns:
      the minimum TTL from all answers in seconds.
    • asBuilder

      public DnsMessage.Builder asBuilder()
    • asNormalizedVersion

      public DnsMessage asNormalizedVersion()
    • getResponseBuilder

      public DnsMessage.Builder getResponseBuilder(DnsMessage.RESPONSE_CODE responseCode)
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object
    • filterAnswerSectionBy

      public <D extends Data> List<Record<D>> filterAnswerSectionBy(Class<D> type)
    • filterAuthoritySectionBy

      public <D extends Data> List<Record<D>> filterAuthoritySectionBy(Class<D> type)
    • filterAdditionalSectionBy

      public <D extends Data> List<Record<D>> filterAdditionalSectionBy(Class<D> type)
    • getFirstOfTypeFromAnswerSection

      public <D extends Data> Record<D> getFirstOfTypeFromAnswerSection(Class<D> type)
    • getFirstOfTypeFromAuthoritySection

      public <D extends Data> Record<D> getFirstOfTypeFromAuthoritySection(Class<D> type)
    • getFirstOfTypeFromAdditionalSection

      public <D extends Data> Record<D> getFirstOfTypeFromAdditionalSection(Class<D> type)
    • equals

      public boolean equals(Object other)
      Overrides:
      equals in class Object
    • builder

      public static DnsMessage.Builder builder()