Exemplo n.º 1
0
        public static DnsFlags ParseFlags(ushort flags)
        {
            var replyCode           = (byte)(flags & 0x000f);
            var nonAuthenticated    = (flags & 0b1000) != 0;
            var answerAuthenticated = (flags & 0b10000) != 0;
            var recursionAvailable  = (flags & 0b10000000) != 0;
            var recursionDesired    = (flags & 0b100000000) != 0;
            var truncated           = (flags & 0b1000000000) != 0;
            var authoritative       = (flags & 0b10000000000) != 0;
            var opcodeByte          = flags & 0b111100000000000;
            var opcode = Opcode.Standard;

            if (opcodeByte == 0)
            {
                opcode = Opcode.Standard;
            }
            var responce = (flags & 0b1000000000000000) != 0;

            var result = new DnsFlags
            {
                Response           = responce,
                Opcode             = opcode,
                Authoritative      = authoritative,
                Truncated          = truncated,
                RecursionDesired   = recursionDesired,
                RecursionAvailable = recursionAvailable,
                AdBit = false,
                AnswerAuthenticated = answerAuthenticated,
                NonAuthenticated    = nonAuthenticated,
                ReplyCode           = replyCode
            };

            return(result);
        }
Exemplo n.º 2
0
 public DnsTransaction(ushort _txnid, DnsFlags _flags, List <QuestionRecord> _questions, List <ResourceRecord> _answerRRs = null, List <ResourceRecord> _authorityRRs = null, List <ResourceRecord> _additionalRRs = null)
 {
     txnId = _txnid;
     flags = _flags;
     if (_questions == null)
     {
         throw new MalformedRecord();
     }
     this.queries = _questions;
     if (_answerRRs == null)
     {
         _answerRRs = new List <ResourceRecord>(0);
     }
     this.answerRecords = _answerRRs;
     if (_authorityRRs == null)
     {
         _authorityRRs = new List <ResourceRecord>(0);
     }
     this.authorityRecords = _authorityRRs;
     if (_additionalRRs == null)
     {
         _additionalRRs = new List <ResourceRecord>(0);
     }
     this.additionalRecords = _additionalRRs;
 }
Exemplo n.º 3
0
        public static ushort CreateFlags(DnsFlags flags)
        {
            var response            = BoolToBit(flags.Response);
            var opcode              = (byte)flags.Opcode;
            var authoritative       = BoolToBit(flags.Authoritative);
            var truncated           = BoolToBit(flags.Truncated);
            var recursionDesired    = BoolToBit(flags.RecursionDesired);
            var recursionAvailable  = BoolToBit(flags.RecursionAvailable);
            var answerAuthenticated = BoolToBit(flags.AnswerAuthenticated);
            var nonAuthenticated    = BoolToBit(flags.NonAuthenticated);
            var replyCode           = flags.ReplyCode;

            var value = (response << 15) | ((opcode & 0b1111) << 11) | (authoritative << 10) | (truncated << 9) |
                        (recursionDesired << 8) | (recursionAvailable << 7) | (answerAuthenticated << 5) |
                        (nonAuthenticated << 4) | replyCode;

            return((ushort)value);
        }
Exemplo n.º 4
0
        public DnsTransaction(byte[] bytes)
        {
            ushort offset = 0;
            ushort qc;
            ushort ansc;
            ushort authc;
            ushort addc;

            this.txnId = GetLEUInt16(bytes, ref offset);
            this.flags = new DnsFlags(GetLEUInt16(bytes, ref offset));

            qc                     = GetLEUInt16(bytes, ref offset);
            this.queries           = new List <QuestionRecord>(qc);
            ansc                   = GetLEUInt16(bytes, ref offset);
            this.answerRecords     = new List <ResourceRecord>(ansc);
            authc                  = GetLEUInt16(bytes, ref offset);
            this.authorityRecords  = new List <ResourceRecord>(authc);
            addc                   = GetLEUInt16(bytes, ref offset);
            this.additionalRecords = new List <ResourceRecord>(addc);

            for (int n = 0; n < qc; n++)
            {
                this.queries.Add(new QuestionRecord(bytes, ref offset));
            }
            for (int n = 0; n < ansc; n++)
            {
                this.answerRecords.Add(new ResourceRecord(bytes, ref offset));
            }
            for (int n = 0; n < authc; n++)
            {
                this.authorityRecords.Add(new ResourceRecord(bytes, ref offset));
            }
            for (int n = 0; n < addc; n++)
            {
                this.additionalRecords.Add(new ResourceRecord(bytes, ref offset));
            }
        }
Exemplo n.º 5
0
 public DnsTransaction(ushort _txnid, DnsFlags _flags, QuestionRecord _question)
     : this(_txnid, _flags, oneItemList <QuestionRecord>(_question))
 {
 }