完善dns配置检测
This commit is contained in:
parent
99646b8700
commit
1c693e2282
@ -1,5 +1,6 @@
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Net;
|
||||
using System.Net.NetworkInformation;
|
||||
|
||||
namespace FastGithub
|
||||
{
|
||||
@ -29,14 +30,43 @@ namespace FastGithub
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 验证
|
||||
/// 验证dns
|
||||
/// 防止使用自己使用自己来解析域名造成死循环
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public bool Validate()
|
||||
{
|
||||
return System.Net.IPAddress.TryParse(this.IPAddress, out var address)
|
||||
? !(address.Equals(System.Net.IPAddress.Loopback) && this.Port == 53)
|
||||
: false;
|
||||
if (System.Net.IPAddress.TryParse(this.IPAddress, out var address) == false)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (this.Port == 53 && IsLocalMachineIPAddress(address))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 是否为本机ip
|
||||
/// </summary>
|
||||
/// <param name="address"></param>
|
||||
/// <returns></returns>
|
||||
private static bool IsLocalMachineIPAddress(IPAddress address)
|
||||
{
|
||||
foreach (var @interface in NetworkInterface.GetAllNetworkInterfaces())
|
||||
{
|
||||
foreach (var addressInfo in @interface.GetIPProperties().UnicastAddresses)
|
||||
{
|
||||
if (addressInfo.Address.Equals(address))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -12,7 +12,7 @@ namespace FastGithub.ReverseProxy
|
||||
/// <summary>
|
||||
/// 受信任的域名解析器
|
||||
/// </summary>
|
||||
sealed class TrustedResolver
|
||||
sealed class DomainResolver
|
||||
{
|
||||
private readonly IMemoryCache memoryCache;
|
||||
private readonly TimeSpan cacheTimeSpan = TimeSpan.FromSeconds(10d);
|
||||
@ -22,7 +22,7 @@ namespace FastGithub.ReverseProxy
|
||||
/// 受信任的域名解析器
|
||||
/// </summary>
|
||||
/// <param name="options"></param>
|
||||
public TrustedResolver(
|
||||
public DomainResolver(
|
||||
IMemoryCache memoryCache,
|
||||
IOptionsMonitor<FastGithubOptions> options)
|
||||
{
|
||||
@ -66,6 +66,7 @@ namespace FastGithub.ReverseProxy
|
||||
throw new Exception($"解析不到{domain}的ip");
|
||||
}
|
||||
|
||||
// 受干扰的dns,常常返回127.0.0.1来阻断请求
|
||||
// 如果解析到的ip为本机ip,会产生反向代理请求死循环
|
||||
if (address.Equals(IPAddress.Loopback))
|
||||
{
|
||||
@ -13,7 +13,7 @@ namespace FastGithub.ReverseProxy
|
||||
/// </summary>
|
||||
class NoSniHttpClientHanlder : DelegatingHandler
|
||||
{
|
||||
private readonly TrustedResolver trustedDomainResolver;
|
||||
private readonly DomainResolver trustedDomainResolver;
|
||||
private readonly ILogger<NoSniHttpClientHanlder> logger;
|
||||
|
||||
/// <summary>
|
||||
@ -21,7 +21,7 @@ namespace FastGithub.ReverseProxy
|
||||
/// </summary>
|
||||
/// <param name="trustedDomainResolver"></param>
|
||||
public NoSniHttpClientHanlder(
|
||||
TrustedResolver trustedDomainResolver,
|
||||
DomainResolver trustedDomainResolver,
|
||||
ILogger<NoSniHttpClientHanlder> logger)
|
||||
{
|
||||
this.trustedDomainResolver = trustedDomainResolver;
|
||||
|
||||
@ -18,7 +18,7 @@ namespace FastGithub
|
||||
return services
|
||||
.AddMemoryCache()
|
||||
.AddHttpForwarder()
|
||||
.AddSingleton<TrustedResolver>()
|
||||
.AddSingleton<DomainResolver>()
|
||||
.AddTransient<NoSniHttpClientHanlder>();
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user