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)); }
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)); }
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)); }
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)); }
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)); }
/// <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)); }
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)); }