Summary description for DnsQueryRequest.
Inheritance: DnsQueryBase
Esempio n. 1
0
        private DnsQueryRequest ParseQuery(ref MemoryStream ms)
        {
            DnsQueryRequest queryRequest = new DnsQueryRequest();

            // Read name
            queryRequest.Name = DnsRecordBase.ParseName(ref ms);
            return(queryRequest);
        }
Esempio n. 2
0
		private DnsQueryRequest ParseQuery(ref MemoryStream ms) 
		{
			DnsQueryRequest queryRequest = new DnsQueryRequest();
			
            // Read name
			queryRequest.Name = DnsRecordBase.ParseName(ref ms);
			return queryRequest;
		}
Esempio n. 3
0
		internal void ParseResponse(byte[] recvBytes) 
		{
			MemoryStream ms = new MemoryStream(recvBytes);
            byte[] flagBytes = new byte[2];
            byte[] transactionId = new byte[2];
			byte[] questions = new byte[2];
			byte[] answerRRs = new byte[2];
			byte[] authorityRRs = new byte[2];
			byte[] additionalRRs = new byte[2];
            byte[] nsType = new byte[2];
            byte[] nsClass = new byte[2];

			this._bytesReceived = recvBytes.Length;

			// Parse DNS Response
			ms.Read(transactionId, 0, 2);
            ms.Read(flagBytes, 0, 2);
			ms.Read(questions, 0, 2);
			ms.Read(answerRRs, 0, 2);
			ms.Read(authorityRRs, 0, 2);
			ms.Read(additionalRRs ,0, 2);

            // Parse Header
            _transactionId = (ushort)IPAddress.NetworkToHostOrder((short)BitConverter.ToUInt16(transactionId, 0));
            _flags = (ushort)IPAddress.NetworkToHostOrder((short)BitConverter.ToUInt16(flagBytes, 0));
            _queryResponse = (QueryResponse)(_flags & (ushort)FlagMasks.QueryResponseMask);
            _opCode = (OpCode)(_flags & (ushort)FlagMasks.OpCodeMask);
            _nsFlags = (NsFlags)(_flags & (ushort)FlagMasks.NsFlagMask);
            _rCode = (RCode)(_flags & (ushort)FlagMasks.RCodeMask);

            // Parse Questions Section
            _questions = (ushort)IPAddress.NetworkToHostOrder((short)BitConverter.ToUInt16(questions, 0));
            _answerRRs = (ushort)IPAddress.NetworkToHostOrder(BitConverter.ToInt16(answerRRs, 0));
            _authorityRRs = (ushort)IPAddress.NetworkToHostOrder(BitConverter.ToInt16(authorityRRs, 0));
            _additionalRRs = (ushort)IPAddress.NetworkToHostOrder(BitConverter.ToInt16(additionalRRs, 0));

            _additionalRecords = new DnsRecordBase[_additionalRRs];
            _answers = new DnsRecordBase[_answerRRs];
            _authoritiveNameServers = new DnsRecordBase[_authorityRRs];
			
			// Parse Queries
			_queryRequest = this.ParseQuery(ref ms);

            // Read dnsType
            ms.Read(nsType, 0, 2);

            // Read dnsClass
            ms.Read(nsClass, 0, 2);

            _nsType = (NsType)IPAddress.NetworkToHostOrder(BitConverter.ToInt16(nsType, 0));
            _nsClass = (NsClass)IPAddress.NetworkToHostOrder(BitConverter.ToInt16(nsClass, 0));

			// Read in Answer Blocks
			for (int i=0; i < _answerRRs; i++)
			{
				_answers[i] = RecordFactory.Create(ref ms);
			}

			// Parse Authority Records
			for (int i=0; i < _authorityRRs; i++) 
			{
                _authoritiveNameServers[i] = RecordFactory.Create(ref ms);
			}

			// Parse Additional Records
			for (int i=0; i < _additionalRRs; i++) 
			{
                _additionalRecords[i] = RecordFactory.Create(ref ms);
			}
		}
Esempio n. 4
0
        private void btnLookup_Click(object sender, EventArgs e)
        {
            NsType lookupType = (NsType)((FieldInfo)lstBxQueryType.SelectedValue).GetValue(null);

            DnsQueryRequest request = new DnsQueryRequest();

            DnsQueryResponse response = request.Resolve(txtDnsServer.Text, txtNameToLookup.Text, lookupType, NsClass.INET, ProtocolType.Udp);
            StringBuilder sb = new StringBuilder(1024);

            sb.Append("Bytes received: " + response.BytesReceived);
            sb.Append("\r\n");

            // Enumerate the Authoritive Name Servers Records
            sb.Append("Authoritive Name Servers:");
            sb.Append("\r\n");
            
            foreach (IDnsRecord record in response.AuthoritiveNameServers)
            {
                sb.Append(record.Answer);
                sb.Append("\r\n");
                sb.Append("  |--- RDATA Field Length: ");
                sb.Append(record.DnsHeader.DataLength);
                sb.Append("\r\n");
                sb.Append("  |--- Name: ");
                sb.Append(record.DnsHeader.Name);
                sb.Append("\r\n");
                sb.Append("  |--- NS Class: ");
                sb.Append(record.DnsHeader.NsClass);
                sb.Append("\r\n");
                sb.Append("  |--- NS Type: ");
                sb.Append(record.DnsHeader.NsType);
                sb.Append("\r\n");
                sb.Append("  |--- TTL: ");
                sb.Append(record.DnsHeader.TimeToLive);
                sb.Append("\r\n");
            }

            // Enumerate the Answer Records
            sb.Append("Answers:");
            sb.Append("\r\n");
            foreach (IDnsRecord record in response.Answers)
            {
                sb.Append(record.Answer);
                sb.Append("\r\n");
                sb.Append("  |--- RDATA Field Length: ");
                sb.Append(record.DnsHeader.DataLength);
                sb.Append("\r\n");
                sb.Append("  |--- Name: ");
                sb.Append(record.DnsHeader.Name);
                sb.Append("\r\n");
                sb.Append("  |--- NS Class: ");
                sb.Append(record.DnsHeader.NsClass);
                sb.Append("\r\n");
                sb.Append("  |--- NS Type: ");
                sb.Append(record.DnsHeader.NsType);
                sb.Append("\r\n");
                sb.Append("  |--- TTL: ");
                sb.Append(record.DnsHeader.TimeToLive);
                sb.Append("\r\n");
            }
            
            sb.Append("Additional Records");
            sb.Append("\r\n");
            foreach (IDnsRecord record in response.AdditionalRecords)
            {
                sb.Append(record.Answer);
                sb.Append("\r\n");
                sb.Append("  |--- RDATA Field Length: ");
                sb.Append(record.DnsHeader.DataLength);
                sb.Append("\r\n");
                sb.Append("  |--- Name: ");
                sb.Append(record.DnsHeader.Name);
                sb.Append("\r\n");
                sb.Append("  |--- NS Class: ");
                sb.Append(record.DnsHeader.NsClass);
                sb.Append("\r\n");
                sb.Append("  |--- NS Type: ");
                sb.Append(record.DnsHeader.NsType);
                sb.Append("\r\n");
                sb.Append("  |--- TTL: ");
                sb.Append(record.DnsHeader.TimeToLive);
                sb.Append("\r\n");
            }

            txtOutput.Text = sb.ToString();
        }
Esempio n. 5
0
        internal void ParseResponse(byte[] recvBytes)
        {
            MemoryStream ms = new MemoryStream(recvBytes);

            byte[] flagBytes     = new byte[2];
            byte[] transactionId = new byte[2];
            byte[] questions     = new byte[2];
            byte[] answerRRs     = new byte[2];
            byte[] authorityRRs  = new byte[2];
            byte[] additionalRRs = new byte[2];
            byte[] nsType        = new byte[2];
            byte[] nsClass       = new byte[2];

            this._bytesReceived = recvBytes.Length;

            // Parse DNS Response
            ms.Read(transactionId, 0, 2);
            ms.Read(flagBytes, 0, 2);
            ms.Read(questions, 0, 2);
            ms.Read(answerRRs, 0, 2);
            ms.Read(authorityRRs, 0, 2);
            ms.Read(additionalRRs, 0, 2);

            // Parse Header
            _transactionId = (ushort)IPAddress.NetworkToHostOrder((short)BitConverter.ToUInt16(transactionId, 0));
            _flags         = (ushort)IPAddress.NetworkToHostOrder((short)BitConverter.ToUInt16(flagBytes, 0));
            _queryResponse = (QueryResponse)(_flags & (ushort)FlagMasks.QueryResponseMask);
            _opCode        = (OpCode)(_flags & (ushort)FlagMasks.OpCodeMask);
            _nsFlags       = (NsFlags)(_flags & (ushort)FlagMasks.NsFlagMask);
            _rCode         = (RCode)(_flags & (ushort)FlagMasks.RCodeMask);

            // Parse Questions Section
            _questions     = (ushort)IPAddress.NetworkToHostOrder((short)BitConverter.ToUInt16(questions, 0));
            _answerRRs     = (ushort)IPAddress.NetworkToHostOrder(BitConverter.ToInt16(answerRRs, 0));
            _authorityRRs  = (ushort)IPAddress.NetworkToHostOrder(BitConverter.ToInt16(authorityRRs, 0));
            _additionalRRs = (ushort)IPAddress.NetworkToHostOrder(BitConverter.ToInt16(additionalRRs, 0));

            _additionalRecords      = new DnsRecordBase[_additionalRRs];
            _answers                = new DnsRecordBase[_answerRRs];
            _authoritiveNameServers = new DnsRecordBase[_authorityRRs];

            // Parse Queries
            _queryRequest = this.ParseQuery(ref ms);

            // Read dnsType
            ms.Read(nsType, 0, 2);

            // Read dnsClass
            ms.Read(nsClass, 0, 2);

            _nsType  = (NsType)IPAddress.NetworkToHostOrder(BitConverter.ToInt16(nsType, 0));
            _nsClass = (NsClass)IPAddress.NetworkToHostOrder(BitConverter.ToInt16(nsClass, 0));

            // Read in Answer Blocks
            for (int i = 0; i < _answerRRs; i++)
            {
                _answers[i] = RecordFactory.Create(ref ms);
            }

            // Parse Authority Records
            for (int i = 0; i < _authorityRRs; i++)
            {
                _authoritiveNameServers[i] = RecordFactory.Create(ref ms);
            }

            // Parse Additional Records
            for (int i = 0; i < _additionalRRs; i++)
            {
                _additionalRecords[i] = RecordFactory.Create(ref ms);
            }
        }