internal RP(EndianBinaryReader Reader) { base.UpdateProperties(Reader); ResponsibleMailbox = DnsPacket.DecodeName(Reader); TXTDomainName = DnsPacket.DecodeName(Reader); base.RecordData = String.Format("{0} {1}", ResponsibleMailbox, TXTDomainName); }
internal RT(EndianBinaryReader Reader) { base.UpdateProperties(Reader); Preference = Reader.ReadUInt16(true); TargetName = DnsPacket.DecodeName(Reader); base.RecordData = String.Format("{0} {1}", Preference, TargetName); }
internal MINFO(EndianBinaryReader Reader) { base.UpdateProperties(Reader); ResponsibleMailbox = DnsPacket.DecodeName(Reader); ErrorMailbox = DnsPacket.DecodeName(Reader); base.RecordData = String.Format("{0} {1}", ResponsibleMailbox, ErrorMailbox); }
internal AFSDB(EndianBinaryReader Reader) { base.UpdateProperties(Reader); SubType = Reader.ReadUInt16(true); if (Enum.IsDefined(typeof(AFSDBSubType), SubType)) { SubTypeName = (AFSDBSubType)SubType; } TargetName = DnsPacket.DecodeName(Reader); base.RecordData = String.Format("{0} {1}", SubType, TargetName); }
internal SRV(EndianBinaryReader Reader) { base.UpdateProperties(Reader); Priority = Reader.ReadUInt16(true); Weight = Reader.ReadUInt16(true); Port = Reader.ReadUInt16(true); TargetName = DnsPacket.DecodeName(Reader); base.RecordData = String.Format("{0} {1} {2} {3}", Priority, Weight, Port, TargetName); }
internal SOA(EndianBinaryReader Reader) { base.UpdateProperties(Reader); TargetName = DnsPacket.DecodeName(Reader); ResponsiblePerson = DnsPacket.DecodeName(Reader); Serial = Reader.ReadUInt32(true); Refresh = Reader.ReadUInt32(true); Retry = Reader.ReadUInt32(true); Expire = Reader.ReadUInt32(true); MinimumTTL = Reader.ReadUInt32(true); base.RecordData = String.Format("{0} {1} {2} {3} {4} {5} {6}", TargetName, ResponsiblePerson, Serial, Refresh, Retry, Expire, MinimumTTL); }
internal WINSR(EndianBinaryReader Reader) { base.UpdateProperties(Reader); MappingFlag = (WINSMappingFlag)Reader.ReadUInt32(true); LookupTimeout = Reader.ReadUInt32(true); CacheTimeout = Reader.ReadUInt32(true); ResultDomain = DnsPacket.DecodeName(Reader); String RecordData = String.Format("L{0} C{1} ( {2} )", LookupTimeout, CacheTimeout, ResultDomain); if (MappingFlag == WINSMappingFlag.NoReplication) { RecordData = "LOCAL " + RecordData; } base.RecordData = RecordData; }
internal Byte[] ToIxfrByte() { Byte[] NameBytes = DnsPacket.EncodeName(base.Name.TrimEnd(new char[] { '.' })); UInt16 RecordDataLength = 22; Int32 TotalLength = NameBytes.Length + 32; Int32 CurrentIndex = 0; // Create the Byte Array Byte[] RecordBytes = new Byte[TotalLength]; // Populate the Byte Array Array.Copy(NameBytes, RecordBytes, NameBytes.Length); CurrentIndex += NameBytes.Length; Array.Copy(EndianBitConverter.ToByte((UInt16)base.RecordType, false), 0, RecordBytes, CurrentIndex, 2); CurrentIndex += 2; Array.Copy(EndianBitConverter.ToByte((UInt16)base.RecordClass, false), 0, RecordBytes, CurrentIndex, 2); CurrentIndex += 6; Array.Copy(EndianBitConverter.ToByte(RecordDataLength, false), 0, RecordBytes, CurrentIndex, 2); CurrentIndex += 4; Array.Copy(EndianBitConverter.ToByte(Serial, false), 0, RecordBytes, CurrentIndex, 4); return(RecordBytes); }
// Private Methods private ResourceRecord ResourceRecord(EndianBinaryReader Reader) { Int64 Position = Reader.BaseStream.Position; String Name = DnsPacket.DecodeName(Reader); RecordType RecordType = (RecordType)Reader.ReadUInt16(true); if (RecordType == RecordType.OPT) { Reader.BaseStream.Seek(Position, SeekOrigin.Begin); this.EDns = new EDns(Reader); return(null); } else { RecordClass RecordClass = (RecordClass)Reader.ReadUInt16(true); UInt32 TTL = Reader.ReadUInt32(true); UInt16 RDataLength = Reader.ReadUInt16(true); Reader.BaseStream.Seek(Position, SeekOrigin.Begin); Object RData = new Object(); switch (RecordType) { case RecordType.A: RData = new A(Reader); break; // Tested case RecordType.NS: RData = new NS(Reader); break; // Tested case RecordType.MD: RData = new MD(Reader); break; case RecordType.MF: RData = new MF(Reader); break; case RecordType.CNAME: RData = new CNAME(Reader); break; // Tested case RecordType.SOA: RData = new SOA(Reader); break; // Tested case RecordType.MB: RData = new MB(Reader); break; // Tested case RecordType.MG: RData = new MG(Reader); break; case RecordType.MR: RData = new MR(Reader); break; case RecordType.NULL: RData = new NULL(Reader, RDataLength); break; case RecordType.WKS: RData = new WKS(Reader, RDataLength); break; case RecordType.PTR: RData = new PTR(Reader); break; // Tested case RecordType.HINFO: RData = new HINFO(Reader); break; // Tested case RecordType.MINFO: RData = new MINFO(Reader); break; case RecordType.MX: RData = new MX(Reader); break; // Tested case RecordType.TXT: RData = new TXT(Reader); break; // Tested case RecordType.RP: RData = new RP(Reader); break; case RecordType.AFSDB: RData = new AFSDB(Reader); break; // Tested case RecordType.X25: RData = new X25(Reader); break; case RecordType.ISDN: RData = new ISDN(Reader); break; case RecordType.RT: RData = new RT(Reader); break; case RecordType.NSAP: RData = new NSAP(Reader); break; case RecordType.AAAA: RData = new AAAA(Reader); break; // Tested case RecordType.SRV: RData = new SRV(Reader); break; // Tested case RecordType.ATMA: RData = new ATMA(Reader, RDataLength); break; // Tested case RecordType.WINS: RData = new WINS(Reader); break; // Tested case RecordType.WINSR: RData = new WINSR(Reader); break; // Tested default: RData = Reader.ReadBytes(RDataLength); break; } return((ResourceRecord)RData); } }
internal Question(EndianBinaryReader Response) { this.Name = DnsPacket.DecodeName(Response); this.RecordType = (RecordType)(Response.ReadUInt16(true)); this.RecordClass = (RecordClass)(Response.ReadUInt16(true)); }
// Constructors internal Question(String Name, RecordType RecordType) { this.Name = Name.TrimEnd(new char[] { '.' }); this.RecordType = RecordType; this.EncodedName = DnsPacket.EncodeName(this.Name); }
internal CNAME(EndianBinaryReader Reader) { base.UpdateProperties(Reader); Hostname = DnsPacket.DecodeName(Reader); base.RecordData = Hostname.ToString(); }