private DnsQueryRequest ParseQuery(ref MemoryStream ms) { DnsQueryRequest queryRequest = new DnsQueryRequest(); // Read name queryRequest.Name = DnsRecordBase.ParseName(ref ms); return(queryRequest); }
private DnsQueryRequest ParseQuery(ref MemoryStream ms) { DnsQueryRequest queryRequest = new DnsQueryRequest(); // Read name queryRequest.Name = DnsRecordBase.ParseName(ref ms); return queryRequest; }
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); } }
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(); }
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); } }