public void DnsQuestionMsgParserTest()
        {
            DnsMessage msg = DnsMessageParser.Parse(Convert.FromBase64String(ATypeQueryTestData));

            Assert.IsNotNull(msg);

            Assert.AreEqual(0xbc96, msg.Id);
            Assert.IsTrue(msg.Flags.Length == 16);
            Assert.IsTrue(msg.OpCode == OpCode.Query, "OpCode should be a query");
            Assert.IsTrue(!msg.IsResponse, "Should be a query");
            Assert.IsTrue(!msg.IsTruncated, "Should not be truncated");
            Assert.IsTrue(msg.IsReccursionDesired, "Should query recursively");
            Assert.IsTrue(!msg.IsNonAuthenticatedDataAcceptable, "Non authenticated data should not be accepted");
            Assert.IsTrue(msg.QueryQuestions.Count == 1, "Should contain 1 question");
        }
        public void DnsQuestionResponseParseTest()
        {
            var        msgBytes  = Convert.FromBase64String(ATypeQueryResponseTestData);
            DnsMessage msg       = DnsMessageParser.Parse(msgBytes);
            var        converted = DnsMessageParser.GetBytes(msg);

            byte[] msgNumsPart     = new byte[12];
            byte[] msgByteNumsPart = new byte[12];

            Buffer.BlockCopy(converted, 0, msgNumsPart, 0, 12);
            Buffer.BlockCopy(msgBytes, 0, msgByteNumsPart, 0, 12);

            Assert.IsTrue(msgNumsPart.SequenceEqual(msgByteNumsPart), $"{string.Join( ", ", msgNumsPart )} does not equal {string.Join( ", ", msgByteNumsPart )}");

            Assert.AreEqual <int>(msgBytes.Length, converted.Length, "Lengths are not equal");

            Assert.IsTrue(msgBytes.SequenceEqual(converted));
        }
Esempio n. 3
0
        private DnsMessage SendQueryToFirstAvailable(List <IPAddress> dnsAddresses, DnsMessage query)
        {
            using (UdpClient client = new UdpClient(_clientPortNum, AddressFamily.InterNetwork)) {
                var dgram = DnsMessageParser.GetBytes(query);
                foreach (var address in dnsAddresses)
                {
                    IPEndPoint dnsEp = new IPEndPoint(address, 53);
                    client.Send(dgram, dgram.Length, dnsEp);
                    var responce = DnsMessageParser.Parse(client.Receive(ref dnsEp));
                    if (responce.IsResponse && responce.AnswerRecords.Count > 0)
                    {
                        return(responce);
                    }
                }
            }

            return(null);
        }