Пример #1
0
        public RecordDS(RecordReader rr)
        {
            ushort length = rr.ReadUInt16(-2);

            KEYTAG     = rr.ReadUInt16();
            ALGORITHM  = rr.ReadByte();
            DIGESTTYPE = rr.ReadByte();
            length    -= 4;
            DIGEST     = new byte[length];
            DIGEST     = rr.ReadBytes(length);
        }
Пример #2
0
 public RR(RecordReader rr)
 {
     TimeLived = 0;
     NAME      = rr.ReadDomainName();
     Type      = (Type)rr.ReadUInt16();
     Class     = (Class)rr.ReadUInt16();
     TTL       = rr.ReadUInt32();
     RDLENGTH  = rr.ReadUInt16();
     RECORD    = rr.ReadRecord(Type);
     RECORD.RR = this;
 }
Пример #3
0
        public string ReadDomainName()
        {
            StringBuilder name   = new StringBuilder();
            int           length = 0;

            // get  the length of the first label
            while ((length = ReadByte()) != 0)
            {
                // top 2 bits set denotes domain name compression and to reference elsewhere
                if ((length & 0xc0) == 0xc0)
                {
                    // work out the existing domain name, copy this pointer
                    int nextLoc = (length & 0x3f) << 8 | ReadByte();

                    if (nextLoc != m_Position - 2)
                    {
                        RecordReader newRecordReader = new RecordReader(m_Data, nextLoc);
                        name.Append(newRecordReader.ReadDomainName());
                    }

                    return(name.ToString());
                }

                // if not using compression, copy a char at a time to the domain name
                while (length > 0)
                {
                    name.Append(ReadChar());
                    length--;
                }
                name.Append('.');
            }
            if (name.Length == 0)
            {
                return(".");
            }
            else
            {
                return(name.ToString());
            }
        }
Пример #4
0
        public Response(IPEndPoint iPEndPoint, byte[] data)
        {
            Error       = "";
            Server      = iPEndPoint;
            TimeStamp   = DateTime.Now;
            MessageSize = data.Length;
            RecordReader rr = new RecordReader(data);

            Questions   = new List <Question>();
            Answers     = new List <AnswerRR>();
            Authorities = new List <AuthorityRR>();
            Additionals = new List <AdditionalRR>();

            header = new Header(rr);

            //if (header.RCODE != RCode.NoError)
            //	Error = header.RCODE.ToString();

            for (int intI = 0; intI < header.QDCOUNT; intI++)
            {
                Questions.Add(new Question(rr));
            }

            for (int intI = 0; intI < header.ANCOUNT; intI++)
            {
                Answers.Add(new AnswerRR(rr));
            }

            for (int intI = 0; intI < header.NSCOUNT; intI++)
            {
                Authorities.Add(new AuthorityRR(rr));
            }
            for (int intI = 0; intI < header.ARCOUNT; intI++)
            {
                Additionals.Add(new AdditionalRR(rr));
            }
        }
Пример #5
0
 public RecordTXT(RecordReader rr)
 {
     TXT = rr.ReadString();
 }
Пример #6
0
 public RecordNS(RecordReader rr)
 {
     NSDNAME = rr.ReadDomainName();
 }
Пример #7
0
 public RecordA(RecordReader rr)
 {
     Address = new System.Net.IPAddress(rr.ReadBytes(4));
 }
Пример #8
0
 public Question(RecordReader rr)
 {
     QName  = rr.ReadDomainName();
     QType  = (QType)rr.ReadUInt16();
     QClass = (QClass)rr.ReadUInt16();
 }
Пример #9
0
 public RecordDNAME(RecordReader rr)
 {
     TARGET = rr.ReadDomainName();
 }
Пример #10
0
 public RecordMX(RecordReader rr)
 {
     PREFERENCE = rr.ReadUInt16();
     EXCHANGE   = rr.ReadDomainName();
 }
Пример #11
0
 public RecordCNAME(RecordReader rr)
 {
     CNAME = rr.ReadDomainName();
 }
Пример #12
0
 public RecordNSAP(RecordReader rr)
 {
     LENGTH      = rr.ReadUInt16();
     NSAPADDRESS = rr.ReadBytes(LENGTH);
 }
Пример #13
0
 public AdditionalRR(RecordReader br)
     : base(br)
 {
 }
Пример #14
0
 public AuthorityRR(RecordReader br)
     : base(br)
 {
 }
Пример #15
0
 public AnswerRR(RecordReader br)
     : base(br)
 {
 }
Пример #16
0
 public RecordPTR(RecordReader rr)
 {
     PTRDNAME = rr.ReadDomainName();
 }