public byte[] GetBytes()
        {
            using (var memoryStream = new MemoryStream())
            using (var writer = new DnsWriter(0, memoryStream))
            {
                var dnsNameWriter = new DnsNameWriter(memoryStream);

                writer.Write(this.MessageId.ToNetworkByteOrder());
                writer.Write(((ushort)this.Flags).ToNetworkByteOrder());

                writer.Write(this.QueryCount.ToNetworkByteOrder());
                writer.Write(((ushort)this.AnswerRecords.Count).ToNetworkByteOrder());
                writer.Write(((ushort)this.NameServerRecords.Count).ToNetworkByteOrder());
                writer.Write(((ushort)this.AdditionalRecords.Count).ToNetworkByteOrder());

                foreach (var resourceRecord in this.AnswerRecords)
                {
                    resourceRecord.Write(dnsNameWriter, writer);
                }

                foreach (var resourceRecord in this.NameServerRecords)
                {
                    resourceRecord.Write(dnsNameWriter, writer);
                }

                foreach (var resourceRecord in this.AdditionalRecords)
                {
                    resourceRecord.Write(dnsNameWriter, writer);
                }

                return memoryStream.ToArray();
            }
        }
        internal void Write(DnsNameWriter dnsNameWriter, DnsWriter dnsWriter)
        {
            dnsNameWriter.Write(this.Name);
            dnsWriter.Write(((ushort)this.Type).ToNetworkByteOrder());
            dnsWriter.Write(((ushort)this.Class).ToNetworkByteOrder());
            dnsWriter.Write(this.TimeToLive.ToNetworkByteOrder());

            var data = this.GetData(dnsNameWriter);
            dnsWriter.Write(((ushort)data.Length).ToNetworkByteOrder());
            dnsWriter.Write(data);
        }
        public override byte[] GetData(DnsNameWriter dnsNameWriter)
        {
            using (var stream = new MemoryStream())
            {
                foreach (var s in this.strings)
                {
                    var buffer = Encoding.ASCII.GetBytes(s);
                    stream.WriteByte((byte)buffer.Length);
                    stream.Write(buffer, 0, buffer.Length);
                }

                return stream.ToArray();
            }
        }
 public abstract byte[] GetData(DnsNameWriter dnsNameWriter);
 public override byte[] GetData(DnsNameWriter dnsNameWriter)
 {
     return this.ipAddress.GetAddressBytes();
 }