public DNSFrame(byte[] frameToByteArray) { if (!BitConverter.IsLittleEndian) { frameToByteArray = frameToByteArray.Reverse().ToArray(); } FrameAsByte = frameToByteArray; Header = new Header(frameToByteArray.Take(sizeHead).ToArray()); Questions = new ResourceRecords(frameToByteArray.Skip(sizeHead).ToArray(), Header.QDCOUNT, true); framePointer = Questions.Pos + sizeHead - 1; if (Header.ANCOUNT > 0) { Answers = new ExtensionResourceRecords(frameToByteArray, framePointer, Header.ANCOUNT); framePointer = Answers.Pointer; } if (Header.NSCOUNT > 0) { AuthorityRecords = new ExtensionResourceRecords(frameToByteArray, framePointer, Header.NSCOUNT); framePointer = AuthorityRecords.Pointer; } if (Header.ARCOUNT > 0) { AdditionalRecords = new ExtensionResourceRecords(frameToByteArray, framePointer, Header.ARCOUNT); } }
private static IEnumerable <byte> QuestionsToBytes(ResourceRecords frameQuestions) { var byteSequence = new List <byte>(); foreach (var record in frameQuestions.Records) { byteSequence.AddRange(GetDomainNameToByte(record.DomainName)); byteSequence.AddRange(ReverseBytes(BitConverter.GetBytes(record.QType))); byteSequence.AddRange(BitConverter.GetBytes(record.QClass)); } return(byteSequence); }