diff --git a/FastGithub.Scanner/LoopbackDnsHttpHandler.cs b/FastGithub.Scanner/LoopbackDnsHttpHandler.cs
new file mode 100644
index 0000000..529d390
--- /dev/null
+++ b/FastGithub.Scanner/LoopbackDnsHttpHandler.cs
@@ -0,0 +1,68 @@
+using DNS.Client;
+using Microsoft.Extensions.DependencyInjection;
+using System;
+using System.Linq;
+using System.Net;
+using System.Net.Http;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace FastGithub.Scanner
+{
+ ///
+ /// 由本程序提值的dns的httpHandler
+ ///
+ [Service(ServiceLifetime.Transient)]
+ sealed class LoopbackDnsHttpHandler : DelegatingHandler
+ {
+ ///
+ /// 本程序的dns
+ ///
+ private static readonly DnsClient dnsClient = new(IPAddress.Loopback);
+
+ ///
+ /// 发送消息
+ ///
+ ///
+ ///
+ ///
+ protected override async Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
+ {
+ var uri = request.RequestUri;
+ if (uri != null && uri.HostNameType == UriHostNameType.Dns)
+ {
+ var address = await LookupAsync(uri.Host);
+ if (address != null)
+ {
+ var builder = new UriBuilder(uri)
+ {
+ Host = address.ToString()
+ };
+ request.RequestUri = builder.Uri;
+ request.Headers.Host = uri.Host;
+ }
+ }
+
+ return await base.SendAsync(request, cancellationToken);
+ }
+
+ ///
+ /// dns解析ip
+ ///
+ ///
+ ///
+ private static async Task LookupAsync(string host)
+ {
+ try
+ {
+ using var cancellationTokenSource = new CancellationTokenSource(TimeSpan.FromMilliseconds(500d));
+ var addresses = await dnsClient.Lookup(host, cancellationToken: cancellationTokenSource.Token);
+ return addresses.FirstOrDefault();
+ }
+ catch (Exception)
+ {
+ return default;
+ }
+ }
+ }
+}
diff --git a/FastGithub.Scanner/ScannerServiceCollectionExtensions.cs b/FastGithub.Scanner/ScannerServiceCollectionExtensions.cs
index 9afbc5e..f5cda97 100644
--- a/FastGithub.Scanner/ScannerServiceCollectionExtensions.cs
+++ b/FastGithub.Scanner/ScannerServiceCollectionExtensions.cs
@@ -36,7 +36,8 @@ namespace FastGithub
Proxy = null,
UseProxy = false,
AllowAutoRedirect = false
- });
+ })
+ .AddHttpMessageHandler();
return services
.AddMemoryCache()