public Record ParseRecord(RecordHeader header, ref MemoryStream ms)
        {
            var responsibleMb = _parser.ParseName(ref ms);
            var errorMb       = _parser.ParseName(ref ms);
            var answer        = "Responsible MailBox: " + responsibleMb + ", Error MailBox: " + errorMb;

            return(new MInfoRecord(responsibleMb, errorMb, answer));
        }
Example #2
0
        public Record ParseRecord(RecordHeader header, ref MemoryStream ms)
        {
            var name         = _parser.ParseName(ref ms);
            var textLocation = _parser.ParseName(ref ms);
            var answer       = name + ", " + textLocation;

            return(new RpRecord(name, textLocation, answer));
        }
Example #3
0
        public Record ParseRecord(RecordHeader header, ref MemoryStream ms)
        {
            var preferenceBuffer = new byte[2];

            ms.Read(preferenceBuffer, 0, 2);
            //_preference = (ushort)Tools.ByteToUInt(preference);
            var preference       = (ushort)IPAddress.NetworkToHostOrder((short)BitConverter.ToUInt16(preferenceBuffer, 0));
            var intermediateHost = _parser.ParseName(ref ms);
            var answer           = "Preference: " + preference + ", Intermediate Host: " + intermediateHost;

            return(new RtRecord(preference, intermediateHost, answer));
        }
Example #4
0
        public Record ParseRecord(RecordHeader header, ref MemoryStream ms)
        {
            var typeBytes = new byte[2];

            ms.Read(typeBytes, 0, 2);
            // _port = (ushort)Tools.ByteToUInt(type);
            var port = (ushort)IPAddress.NetworkToHostOrder((short)BitConverter.ToUInt16(typeBytes, 0));
            var name = _parser.ParseName(ref ms);
            //_type = (short)Tools.ByteToUInt(type);
            var type   = IPAddress.NetworkToHostOrder(BitConverter.ToInt16(typeBytes, 0));
            var answer = "Name: " + name + ", Port: " + port + ", Type: " + type;

            return(new AfsdbRecord(port, name, type, answer));
        }
Example #5
0
        public Record ParseRecord(RecordHeader header, ref MemoryStream ms)
        {
            // Preference is a function of MX records
            var nsPreference = new byte[2];

            ms.Read(nsPreference, 0, 2);

            var preference = IPAddress.NetworkToHostOrder(BitConverter.ToInt16(nsPreference, 0));

            // Parse Name
            var mailExchange = _parser.ParseName(ref ms);
            var answer       = "MX Preference: " + preference + ", Mail Exchanger: " + mailExchange;

            return(new MxRecord(preference, mailExchange, answer));
        }
Example #6
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="ms"></param>
        public RecordHeader Parse(ref MemoryStream ms)
        {
            var nsTypeBuffer       = new byte[2];
            var nsClassBuffer      = new byte[2];
            var nsTtlBuffer        = new byte[4];
            var nsDataLengthBuffer = new byte[2];

            // Read the name
            var name = _parser.ParseName(ref ms);

            // Read the data header
            ms.Read(nsTypeBuffer, 0, 2);
            ms.Read(nsClassBuffer, 0, 2);
            ms.Read(nsTtlBuffer, 0, 4);
            ms.Read(nsDataLengthBuffer, 0, 2);

            var nsType  = (NsType)IPAddress.NetworkToHostOrder(BitConverter.ToInt16(nsTypeBuffer, 0));
            var nsClass = (NsClass)IPAddress.NetworkToHostOrder(BitConverter.ToInt16(nsClassBuffer, 0));

            var timeToLive = IPAddress.NetworkToHostOrder(BitConverter.ToInt32(nsTtlBuffer, 0));
            var dataLength = IPAddress.NetworkToHostOrder(BitConverter.ToInt16(nsDataLengthBuffer, 0));

            return(new RecordHeader(name, nsType, nsClass, timeToLive, dataLength));
        }
Example #7
0
        public Record ParseRecord(RecordHeader header, ref MemoryStream ms)
        {
            var priorityBuffer = new byte[2];

            ms.Read(priorityBuffer, 0, 2);
            var priority = (ushort)IPAddress.NetworkToHostOrder((short)BitConverter.ToUInt16(priorityBuffer, 0));

            var weightBuffer = new byte[2];

            ms.Read(weightBuffer, 0, 2);
            var weight = (ushort)IPAddress.NetworkToHostOrder((short)BitConverter.ToUInt16(weightBuffer, 0));

            var portBuffer = new byte[2];

            ms.Read(portBuffer, 0, 2);
            var port = (ushort)IPAddress.NetworkToHostOrder((short)BitConverter.ToUInt16(portBuffer, 0));

            var hostName = _parser.ParseName(ref ms);

            var answer = "Service Location: \r\nPriority: " + priority + "\r\nWeight: " +
                         weight + "\r\nPort: " + port + "\r\nHostName: " + hostName + "\r\n";

            return(new SrvRecord(priority, weight, port, hostName, answer));
        }
 public Record ParseRecord(RecordHeader header, ref MemoryStream ms)
 {
     return(new CNameRecord("Host: " + _parser.ParseName(ref ms)));
 }
        public Record ParseRecord(RecordHeader header, ref MemoryStream ms)
        {
            var sb = new StringBuilder();
            // Parse Name
            var primaryNameServer = _parser.ParseName(ref ms);

            sb.Append("Primary NameServer: ");
            sb.Append(primaryNameServer);
            sb.Append("\r\n");

            // Parse Responsible Persons Mailbox (Parse Name)
            var responsiblePerson = _parser.ParseName(ref ms);

            sb.Append("Responsible Person: ");
            sb.Append(responsiblePerson);
            sb.Append("\r\n");

            var serialBuffer          = new byte[4];
            var refreshIntervalBuffer = new byte[4];
            var retryIntervalBuffer   = new byte[4];
            var expirationLimitBuffer = new byte[4];
// ReSharper disable once InconsistentNaming
            var minTTLBuffer = new byte[4];

            // Parse Serial (4 bytes)
            ms.Read(serialBuffer, 0, 4);
            //_serial = Tools.ByteToUInt(serial);
            var serial = (uint)IPAddress.NetworkToHostOrder(BitConverter.ToInt32(serialBuffer, 0));

            sb.Append("Serial: ");
            sb.Append(serial);
            sb.Append("\r\n");

            // Parse Refresh Interval (4 bytes)
            ms.Read(refreshIntervalBuffer, 0, 4);
            // _refreshInterval = Tools.ByteToUInt(refreshInterval);
            var refreshInterval = (uint)IPAddress.NetworkToHostOrder(BitConverter.ToInt32(refreshIntervalBuffer, 0));

            sb.Append("Refresh Interval: ");
            sb.Append(refreshInterval);
            sb.Append("\r\n");

            // Parse Retry Interval (4 bytes)
            ms.Read(retryIntervalBuffer, 0, 4);
            //_retryInterval = Tools.ByteToUInt(retryInterval);
            var retryInterval = (uint)IPAddress.NetworkToHostOrder(BitConverter.ToInt32(retryIntervalBuffer, 0));

            sb.Append("Retry Interval: ");
            sb.Append(retryInterval);
            sb.Append("\r\n");

            // Parse Expiration limit (4 bytes)
            ms.Read(expirationLimitBuffer, 0, 4);
            // _expirationLimit = Tools.ByteToUInt(expirationLimit);
            var expirationLimit = (uint)IPAddress.NetworkToHostOrder(BitConverter.ToInt32(expirationLimitBuffer, 0));

            sb.Append("Expire: ");
            sb.Append(expirationLimit);
            sb.Append("\r\n");

            // Parse Min TTL (4 bytes)
            ms.Read(minTTLBuffer, 0, 4);
            // _minTTL = Tools.ByteToUInt(minTTL);
            var minimumTimeToLive = IPAddress.NetworkToHostOrder(BitConverter.ToInt32(minTTLBuffer, 0));

            sb.Append("TTL: ");
            sb.Append(minimumTimeToLive);
            sb.Append("\r\n");

            return(new SoaRecord(
                       primaryNameServer,
                       responsiblePerson,
                       serial,
                       refreshInterval,
                       retryInterval,
                       expirationLimit,
                       minimumTimeToLive,
                       sb.ToString()));
        }
        public Response ParseResponse(byte[] recvBytes)
        {
            var memoryStream                 = new MemoryStream(recvBytes);
            var flagBytesBuffer              = new byte[2];
            var transactionIdBuffer          = new byte[2];
            var questionsBuffer              = new byte[2];
            var answerRRsBuffer              = new byte[2];
            var authorityRRsBuffer           = new byte[2];
            var additionalRRCountBytesBuffer = new byte[2];
            var nsTypeBuffer                 = new byte[2];
            var nsClassBuffer                = new byte[2];

            var bytesReceived = recvBytes.Length;

            // Parse DNS Response
            memoryStream.Read(transactionIdBuffer, 0, 2);
            memoryStream.Read(flagBytesBuffer, 0, 2);
            memoryStream.Read(questionsBuffer, 0, 2);
            memoryStream.Read(answerRRsBuffer, 0, 2);
            memoryStream.Read(authorityRRsBuffer, 0, 2);
            memoryStream.Read(additionalRRCountBytesBuffer, 0, 2);

            // Parse Header
            var transactionId = (ushort)IPAddress.NetworkToHostOrder((short)BitConverter.ToUInt16(transactionIdBuffer, 0));
            var flags         = (ushort)IPAddress.NetworkToHostOrder((short)BitConverter.ToUInt16(flagBytesBuffer, 0));
            var queryResponse = (QueryResponse)(flags & (ushort)FlagMasks.QueryResponseMask);
            var opCode        = (OpCode)(flags & (ushort)FlagMasks.OpCodeMask);
            var nsFlags       = (NsFlags)(flags & (ushort)FlagMasks.NsFlagMask);
            var rCode         = (RCode)(flags & (ushort)FlagMasks.RCodeMask);

            // Parse Questions Section
            var questions              = (ushort)IPAddress.NetworkToHostOrder((short)BitConverter.ToUInt16(questionsBuffer, 0));
            var answerRRs              = (ushort)IPAddress.NetworkToHostOrder(BitConverter.ToInt16(answerRRsBuffer, 0));
            var authorityRRs           = (ushort)IPAddress.NetworkToHostOrder(BitConverter.ToInt16(authorityRRsBuffer, 0));
            var additionalRRCount      = (ushort)IPAddress.NetworkToHostOrder(BitConverter.ToInt16(additionalRRCountBytesBuffer, 0));
            var additionalRecords      = new List <Record>();
            var answers                = new Record[answerRRs];
            var authoritiveNameServers = new Record[authorityRRs];

            var name = _recordNameParser.ParseName(ref memoryStream);

            // Read dnsType
            memoryStream.Read(nsTypeBuffer, 0, 2);

            // Read dnsClass
            memoryStream.Read(nsClassBuffer, 0, 2);

            var nsType  = (NsType)IPAddress.NetworkToHostOrder(BitConverter.ToInt16(nsTypeBuffer, 0));
            var nsClass = (NsClass)IPAddress.NetworkToHostOrder(BitConverter.ToInt16(nsClassBuffer, 0));

            var headerParser = new RecordHeaderParser(_recordNameParser);

            // Read in Answer Blocks
            for (var i = 0; i < answerRRs; i++)
            {
                var header = headerParser.Parse(ref memoryStream);
                var parser = _parserFactory.Get(header.NsType);
                answers[i] = parser.ParseRecord(header, ref memoryStream);
            }

            // Parse Authority Records
            for (var i = 0; i < authorityRRs; i++)
            {
                var header = headerParser.Parse(ref memoryStream);
                var parser = _parserFactory.Get(header.NsType);
                authoritiveNameServers[i] = parser.ParseRecord(header, ref memoryStream);
            }

            // Parse Additional Records
            for (var i = 0; i < additionalRRCount; i++)
            {
                var header = headerParser.Parse(ref memoryStream);
                var parser = _parserFactory.Get(header.NsType);
                additionalRecords.Add(parser.ParseRecord(header, ref memoryStream));
            }

            return(new Response(transactionId, flags, queryResponse, opCode, nsFlags, rCode, questions, answerRRs, authorityRRs, name, nsType, nsClass, additionalRecords, bytesReceived, answers, authoritiveNameServers));
        }