diff --git a/src/BD.WTTS.Client.Plugins.Accelerator.ReverseProxy/Services.Implementation/Net/DnsDohAnalysisService.cs b/src/BD.WTTS.Client.Plugins.Accelerator.ReverseProxy/Services.Implementation/Net/DnsDohAnalysisService.cs
index 7eb195786..bdc9de329 100644
--- a/src/BD.WTTS.Client.Plugins.Accelerator.ReverseProxy/Services.Implementation/Net/DnsDohAnalysisService.cs
+++ b/src/BD.WTTS.Client.Plugins.Accelerator.ReverseProxy/Services.Implementation/Net/DnsDohAnalysisService.cs
@@ -83,10 +83,10 @@ sealed class DnsDohAnalysisService : GeneralHttpClientFactory
return 0;
}
- ///
- /// DNS 解析查询最大递归查询次数
- ///
- const byte max_recursion_dns_query = 20;
+ /////
+ ///// DNS 解析查询最大递归查询次数
+ /////
+ //const byte max_recursion_dns_query = 20;
static readonly TimeSpan TTL = TimeSpan.FromMinutes(9.9D);
@@ -104,37 +104,37 @@ sealed class DnsDohAnalysisService : GeneralHttpClientFactory
Uri dohAddresUri,
string hostNameOrAddress,
DnsQueryType queryType = DnsQueryType.A,
- byte count = 1,
- HashSet? domainHistory = null,
+ //byte count = 1,
+ //HashSet? domainHistory = null,
CancellationToken cancellationToken = default)
{
- if (count <= max_recursion_dns_query)
- {
- domainHistory ??= new();
- var query = DnsQueryFactory.CreateQuery(hostNameOrAddress, queryType);
- var dnsClient = GetDnsHttpClient(dohAddresUri);
- var answer = await dnsClient.Query(query, cancellationToken);
+ //if (count <= max_recursion_dns_query)
+ //{
+ // domainHistory ??= new();
+ var query = DnsQueryFactory.CreateQuery(hostNameOrAddress, queryType);
+ var dnsClient = GetDnsHttpClient(dohAddresUri);
+ var answer = await dnsClient.Query(query, cancellationToken);
- var dnsResources = answer.Answers.Select(x => x.Resource);
+ var dnsResources = answer.Answers.Select(x => x.Resource);
- var iPAddresses = dnsResources.OfType().Select(x => x.IPAddress).ToArray();
- if (iPAddresses.Any())
- return iPAddresses;
+ var iPAddresses = dnsResources.OfType().Select(x => x.IPAddress).ToArray();
+ if (iPAddresses.Any())
+ return iPAddresses;
- var domainRes = dnsResources.OfType().FirstOrDefault();
- if (domainRes != null)
- {
- var domain = domainRes.Domain;
- if (!string.IsNullOrWhiteSpace(domain))
- {
- if (domainHistory.Add(domain))
- {
- // CNAME 递归解析
- iPAddresses = await Query(dohAddresUri, domain, queryType, ++count, domainHistory, cancellationToken);
- }
- }
- }
- }
+ //var domainRes = dnsResources.OfType().FirstOrDefault();
+ //if (domainRes != null)
+ //{
+ // var domain = domainRes.Domain;
+ // if (!string.IsNullOrWhiteSpace(domain))
+ // {
+ // //if (domainHistory.Add(domain))
+ // //{
+ // // CNAME 递归解析
+ // iPAddresses = await Query(dohAddresUri, domain, queryType,/* ++count, domainHistory,*/ cancellationToken);
+ // //}
+ // }
+ //}
+ ////}
return Array.Empty();
}
@@ -181,6 +181,13 @@ sealed class DnsDohAnalysisService : GeneralHttpClientFactory
}
var result = await Query(dohAddresUri, hostNameOrAddress, queryType, cancellationToken: cancellationToken);
+
+ if (isIPv6 && !result.Any())
+ {
+ // IPv6 返回空时使用 IPv4 解析
+ result = await Query(dohAddresUri, hostNameOrAddress, DnsQueryType.A, cancellationToken: cancellationToken);
+ }
+
if (useCache)
{
Cache[cacheKey] = new()
diff --git a/src/BD.WTTS.UnitTest/DnsDohAnalysisTest.cs b/src/BD.WTTS.UnitTest/DnsDohAnalysisTest.cs
index 681c7c52f..6f34e3bcb 100644
--- a/src/BD.WTTS.UnitTest/DnsDohAnalysisTest.cs
+++ b/src/BD.WTTS.UnitTest/DnsDohAnalysisTest.cs
@@ -11,7 +11,8 @@ public sealed class DnsDohAnalysisTest
{
s.AddLogging(s => s.AddConsole());
s.TryAddClientHttpPlatformHelperService();
- s.AddFusilladeHttpClient();
+ FusilladeHttpClientFactory2 factory = new();
+ s.AddSingleton(factory);
s.AddSingleton();
});
@@ -23,8 +24,8 @@ public sealed class DnsDohAnalysisTest
DNS_Ali_DohAddres,
DNS_Ali_DohAddres2,
DNS_Ali_DohAddres3,
- Google_DohAddres,
- Cloudflare_DohAddres,
+ //Google_DohAddres,
+ //Cloudflare_DohAddres,
DohAddres_360,
TUNA_DohAddres,
};
@@ -62,4 +63,23 @@ public sealed class DnsDohAnalysisTest
Console.WriteLine("--------------------");
}
}
+}
+
+sealed class FusilladeHttpClientFactory2 : FusilladeHttpClientFactory
+{
+ protected override HttpClient CreateClient(HttpMessageHandler handler)
+ {
+ var client = new HttpClient(handler);
+
+ try
+ {
+ client.Timeout = TimeSpan.FromSeconds(14.5D);
+ }
+ catch
+ {
+
+ }
+
+ return client;
+ }
}
\ No newline at end of file