public static DnsQuery ParseQuery(BinaryReader reader, byte[] query, int position, Dictionary <int, byte[]> cache = null) { var(domain, shift) = ParseDomain(query, position, cache); var _ = reader.BaseStream.Seek(shift, SeekOrigin.Begin); var type = (AnswerType)reader.ReadUInt16(); var queryClass = (Class)reader.ReadUInt16(); var result = new DnsQuery { Name = domain, Class = queryClass, AnswerType = type }; return(result); }
public static byte[] CreateQuery(DnsQuery query, int position, Dictionary <string, int> cache) { var result = new List <byte>(); var encodedDomain = EncodeDomain(query.Name, position, cache, false); var type = (short)query.AnswerType; var typeBytes = BitConverter.GetBytes(type); Array.Reverse(typeBytes); var classValue = (short)query.Class; var classBytes = BitConverter.GetBytes(classValue); Array.Reverse(classBytes); result.AddRange(encodedDomain); result.AddRange(typeBytes); result.AddRange(classBytes); return(result.ToArray()); }
public static DnsPacket CreateSimpleErrorPacket(DnsQuery query, ushort queryId, byte replyCode) { var flags = new DnsFlags { RecursionDesired = true, RecursionAvailable = true, ReplyCode = replyCode }; var packet = new DnsPacket { QueryId = queryId, Flags = flags, Queries = new List <DnsQuery> { query }, Answers = new List <DnsAnswer>(), AdditionalAnswers = new List <DnsAnswer>(), AuthorityAnswers = new List <DnsAnswer>() }; return(packet); }