예제 #1
0
            private void WriteResourceRecord(BinaryWriter message_writer, ResourceRecordCollection resources)
            {
                foreach (ResourceRecord rr in resources)
                {
                    WriteResourceString(message_writer, rr.Name);

                    message_writer.Write(CheckSum.ntohs((ushort)rr.Type));
                    message_writer.Write(CheckSum.ntohs((ushort)rr.Class));
                    message_writer.Write(CheckSum.ntohl((uint)rr.TimeToLive));

                    // RDLength (Get Resource Data Length)
                    switch (rr.Type)
                    {
                        case Types.A:
                            {
                                Address rrA = (Address)rr;
                                message_writer.Write(CheckSum.ntohs(4));
                                message_writer.Write(rrA.IP.GetAddressBytes());
                            }
                            break;
                        case Types.AAAA:
                            {
                                Address rrA = (Address)rr;
                                message_writer.Write(CheckSum.ntohs(16));
                                message_writer.Write(rrA.IP.GetAddressBytes());
                            }
                            break;
                        case Types.CNAME:
                            {
                                WriteResourceString(message_writer, rr.RText, true);
                            }
                            break;
                    };
                }
            }
예제 #2
0
        public DnsResponse(int ID, bool AA, bool TC, bool RD, bool RA, int RC)
        {
            this._QueryID            = ID;
            this._AuthorativeAnswer  = AA;
            this._IsTruncated        = TC;
            this._RecursionDesired   = RD;
            this._RecursionAvailable = RA;
            this._ResponseCode       = (ResponseCodes)RC;

            this._ResourceRecords   = new ResourceRecordCollection();
            this._Answers           = new ResourceRecordCollection();
            this._Authorities       = new ResourceRecordCollection();
            this._AdditionalRecords = new ResourceRecordCollection();
        }
예제 #3
0
        public DnsResponse(int ID, bool AA, bool TC, bool RD, bool RA, int RC)
        {
            QueryID            = ID;
            AuthorativeAnswer  = AA;
            IsTruncated        = TC;
            RecursionRequested = RD;
            RecursionAvailable = RA;
            ResponseCode       = (ResponseCodes)RC;

            _ResourceRecords  = new ResourceRecordCollection();
            Answers           = new ResourceRecordCollection();
            Authorities       = new ResourceRecordCollection();
            AdditionalRecords = new ResourceRecordCollection();
        }
예제 #4
0
 public static IEnumerable<IPAddress> GetAddresses(ResourceRecordCollection s)
 {
     ISet<IPAddress> r = new HashSet<IPAddress>();
     if (s == null)
     {
         return r;
     }
     foreach (ResourceRecord rr in s)
     {
         if (rr.Type == Types.A || rr.Type == Types.AAAA)
         {
             Address rrA = (Address)rr;
             r.Add(rrA.IP);
         }
     }
     return r;
 }
예제 #5
0
 public static IEnumerable<string> FetchAddresses(ResourceRecordCollection s)
 {
     ISet<string> r = new HashSet<string>();
     if (s == null)
     {
         return r;
     }
     foreach (ResourceRecord rr in s)
     {
         if (rr.Type == Types.A || rr.Type == Types.AAAA)
         {
             Address rrA = (Address)rr;
             r.Add(rrA.IP.ToString());
         }
         else if (rr.Type == Types.CNAME)
         {
             r.Add(rr.RText);
         }
     }
     return r;
 }