コード例 #1
0
        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);
        }
コード例 #2
0
        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());
        }
コード例 #3
0
        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);
        }