예제 #1
0
        public async Task Query_SecureEU()
        {
            using (var dot = new DotClient
            {
                Servers = new[]
                {
                    new DotEndPoint
                    {
                        Hostname = "securedns.eu",
                        Pins = new[] { "h3mufC43MEqRD6uE4lz6gAgULZ5/riqH/E+U+jE3H8g=" },
                        Address = IPAddress.Parse("146.185.167.43")
                    },
                }
            })
            {
                var query = new Message {
                    RD = true
                };
                query.Questions.Add(new Question {
                    Name = "ipfs.io", Type = DnsType.TXT
                });
                var response = await dot.QueryAsync(query);

                Assert.IsNotNull(response);
                Assert.AreNotEqual(0, response.Answers.Count);
            }
        }
예제 #2
0
        public async Task Query_Cloudflare_IPv6()
        {
            if (!SupportsIPv6)
            {
                Assert.Inconclusive("IPv6 not supported by OS.");
            }
            using (var dot = new DotClient
            {
                Servers = new[]
                {
                    new DotEndPoint
                    {
                        Hostname = "cloudflare-dns.com",
                        Address = IPAddress.Parse("2606:4700:4700::1111")
                    }
                }
            })
            {
                var query = new Message {
                    RD = true
                };
                query.Questions.Add(new Question {
                    Name = "ipfs.io", Type = DnsType.TXT
                });
                var response = await dot.QueryAsync(query);

                Assert.IsNotNull(response);
                Assert.AreNotEqual(0, response.Answers.Count);
            }
        }
예제 #3
0
        public async Task Query_Google()
        {
            using (var dot = new DotClient
            {
                Servers = new[]
                {
                    new DotEndPoint
                    {
                        Hostname = "dns.google",
                        Address = IPAddress.Parse("8.8.8.8")
                    }
                }
            })
            {
                var query = new Message {
                    RD = true
                };
                query.Questions.Add(new Question {
                    Name = "ipfs.io", Type = DnsType.TXT
                });
                var response = await dot.QueryAsync(query);

                Assert.IsNotNull(response);
                Assert.AreNotEqual(0, response.Answers.Count);
            }
        }
예제 #4
0
        public async Task Query_OneDeadServer()
        {
            using (var dot = new DotClient
            {
                Servers = new[]
                {
                    new DotEndPoint
                    {
                        Address = IPAddress.Parse("127.0.0.1"),
                        Port = 8530
                    },
                    new DotEndPoint
                    {
                        Hostname = "cloudflare-dns.com",
                        Address = IPAddress.Parse("1.1.1.1")
                    }
                }
            })
            {
                var query = new Message {
                    RD = true
                };
                query.Questions.Add(new Question {
                    Name = "ipfs.io", Type = DnsType.TXT
                });
                var response = await dot.QueryAsync(query);

                Assert.IsNotNull(response);
                Assert.AreNotEqual(0, response.Answers.Count);
            }
        }
예제 #5
0
 public void Query_InvalidServer_Hostname()
 {
     using (var dot = new DotClient
     {
         Servers = new[]
         {
             new DotEndPoint
             {
                 Hostname = "bad-cloudflare-dns.com", // bad
                 Address = IPAddress.Parse("1.1.1.1")
             }
         }
     })
     {
         var query = new Message {
             RD = true
         };
         query.Questions.Add(new Question {
             Name = "emanon.noname.google.com", Type = DnsType.A
         });
         ExceptionAssert.Throws <Exception>(() =>
         {
             var _ = dot.QueryAsync(query).Result;
         });
     }
 }
예제 #6
0
        public async Task Query_Stream_Closes()
        {
            using (var dot = new DotClient())
            {
                var query = new Message {
                    RD = true, Id = 0x1234
                };
                query.Questions.Add(new Question {
                    Name = "ipfs.io", Type = DnsType.TXT
                });
                var response = await dot.QueryAsync(query);

                Assert.IsNotNull(response);
                Assert.AreNotEqual(0, response.Answers.Count);

                (await dot.GetDnsServerAsync()).Dispose();
                response = await dot.QueryAsync(query);

                Assert.IsNotNull(response);
                Assert.AreNotEqual(0, response.Answers.Count);
            }
        }
예제 #7
0
 public void Query_UnknownName_NoThrow()
 {
     using (var dot = new DotClient {
         ThrowResponseError = false
     })
     {
         var query = new Message {
             RD = true
         };
         query.Questions.Add(new Question {
             Name = "emanon.noname.google.com", Type = DnsType.A
         });
         var result = dot.QueryAsync(query).Result;
         Assert.AreEqual(MessageStatus.NameError, result.Status);
     }
 }
예제 #8
0
 public void Query_UnknownName()
 {
     using (var dot = new DotClient())
     {
         var query = new Message {
             RD = true
         };
         query.Questions.Add(new Question {
             Name = "emanon.noname.google.com", Type = DnsType.A
         });
         ExceptionAssert.Throws <IOException>(() =>
         {
             var _ = dot.QueryAsync(query).Result;
         }, "DNS error 'NameError'.");
     }
 }
예제 #9
0
 public void NoSerer()
 {
     using (var dot = new DotClient
     {
         Servers = new DotEndPoint[0]
     })
     {
         var query = new Message {
             RD = true
         };
         query.Questions.Add(new Question {
             Name = "ipfs.io", Type = DnsType.TXT
         });
         ExceptionAssert.Throws <Exception>(() =>
         {
             var _ = dot.QueryAsync(query).Result;
         });
     }
 }
예제 #10
0
        public async Task SecureQuery_Has_RRs()
        {
            var dns = new DotClient();
            var query = new Message {
                RD = true
            }.UseDnsSecurity();

            query.Questions.Add(new Question {
                Name = "cloudflare-dns.com", Type = DnsType.AAAA
            });
            var response = await dns.QueryAsync(query);

            Assert.IsNotNull(response);
            Assert.AreNotEqual(0, response.Answers.Count);

            var opt = response.AdditionalRecords.OfType <OPTRecord>().Single();

            Assert.AreEqual(true, opt.DO);

            var rrsig = response.Answers.OfType <RRSIGRecord>().Single();

            Assert.AreEqual(DnsType.AAAA, rrsig.TypeCovered);
        }
예제 #11
0
 public void Query_InvalidServer_IPAddress()
 {
     using (var dot = new DotClient
     {
         Servers = new[]
         {
             new DotEndPoint {
                 Address = IPAddress.Any
             }
         }
     })
     {
         var query = new Message {
             RD = true
         };
         query.Questions.Add(new Question {
             Name = "emanon.noname.google.com", Type = DnsType.A
         });
         ExceptionAssert.Throws <Exception>(() =>
         {
             var _ = dot.QueryAsync(query).Result;
         });
     }
 }