Example #1
0
        public Task <DNS.Protocol.IResponse> Resolve(DNS.Protocol.IRequest request, CancellationToken cancellationToken = default)
        {
            DNS.Protocol.IResponse response = DNS.Protocol.Response.FromRequest(request);

            foreach (var question in response.Questions)
            {
                if (question.Type == DNS.Protocol.RecordType.A)
                {
                    var client = new DnsClient.LookupClient(DnsClient.NameServer.GooglePublicDns);
                    client.UseTcpOnly = true;
                    client.UseCache   = true;

                    try
                    {
                        var result = client.Query(question.Name.ToString(), DnsClient.QueryType.A);
                        foreach (var item in result.Answers.ARecords())
                        {
                            response.AnswerRecords.Add(new DNS.Protocol.ResourceRecords.IPAddressResourceRecord(question.Name, item.Address));
                        }
                    }
                    catch (Exception)
                    {
                        // 跳过
                    }
                }
                else if (question.Type == DNS.Protocol.RecordType.AAAA)
                {
                    var client = new DnsClient.LookupClient(DnsClient.NameServer.GooglePublicDns);
                    client.UseTcpOnly = true;
                    client.UseCache   = true;

                    try
                    {
                        var result = client.Query(question.Name.ToString(), DnsClient.QueryType.AAAA);
                        foreach (var item in result.Answers.AaaaRecords())
                        {
                            response.AnswerRecords.Add(new DNS.Protocol.ResourceRecords.IPAddressResourceRecord(question.Name, item.Address));
                        }
                    }
                    catch (Exception)
                    {
                        // 跳过
                    }
                }
                else
                {
                    // 跳过
                }
            }

            return(Task.FromResult(response));
        }
Example #2
0
 static void serverRequested(DNS.Protocol.IRequest request)
 {
     //this function called whenn DNS request is received
 }
Example #3
0
 static void serverResponded(DNS.Protocol.IRequest request, DNS.Protocol.IResponse response)
 {
     //called when dns response is send
 }