应用关闭时恢复原dns记录
This commit is contained in:
parent
922d47fdab
commit
2bdec42b0a
@ -17,6 +17,7 @@ namespace FastGithub.Dns
|
||||
private readonly DnsServer dnsServer;
|
||||
private readonly IOptions<DnsOptions> options;
|
||||
private readonly ILogger<DnsHostedService> logger;
|
||||
private IPAddress[]? dnsAddresses;
|
||||
|
||||
/// <summary>
|
||||
/// dns后台服务
|
||||
@ -43,7 +44,7 @@ namespace FastGithub.Dns
|
||||
{
|
||||
this.dnsServer.Listen();
|
||||
this.logger.LogInformation("dns服务启用成功");
|
||||
this.SetNameServers(IPAddress.Loopback, this.options.Value.UpStream);
|
||||
this.dnsAddresses = this.SetNameServers(IPAddress.Loopback, this.options.Value.UpStream);
|
||||
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
@ -57,30 +58,38 @@ namespace FastGithub.Dns
|
||||
{
|
||||
this.dnsServer.Dispose();
|
||||
this.logger.LogInformation("dns服务已终止");
|
||||
this.SetNameServers();
|
||||
|
||||
if (this.dnsAddresses != null)
|
||||
{
|
||||
this.SetNameServers(this.dnsAddresses);
|
||||
}
|
||||
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 设备dns
|
||||
/// 设置dns
|
||||
/// </summary>
|
||||
/// <param name="nameServers"></param>
|
||||
private void SetNameServers(params IPAddress[] nameServers)
|
||||
/// <returns></returns>
|
||||
private IPAddress[]? SetNameServers(params IPAddress[] nameServers)
|
||||
{
|
||||
var action = nameServers.Length == 0 ? "清除" : "设置";
|
||||
if (this.options.Value.SetToLocalMachine && OperatingSystem.IsWindows())
|
||||
{
|
||||
try
|
||||
{
|
||||
NameServiceUtil.SetNameServers(nameServers);
|
||||
this.logger.LogInformation($"{action}本机dns成功");
|
||||
var results = NameServiceUtil.SetNameServers(nameServers);
|
||||
this.logger.LogInformation($"设置本机dns成功");
|
||||
return results;
|
||||
}
|
||||
|
||||
catch (Exception ex)
|
||||
{
|
||||
this.logger.LogWarning($"{action}本机dns失败:{ex.Message}");
|
||||
this.logger.LogWarning($"设置本机dns失败:{ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
return default;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -32,12 +32,9 @@ namespace FastGithub.Dns
|
||||
var dwBestIfIndex = 0u;
|
||||
var dwDestAddr = BitConverter.ToUInt32(remoteAddress.GetAddressBytes());
|
||||
var errorCode = GetBestInterface(dwDestAddr, ref dwBestIfIndex);
|
||||
if (errorCode != 0)
|
||||
{
|
||||
throw new NetworkInformationException(errorCode);
|
||||
}
|
||||
|
||||
return NetworkInterface
|
||||
return errorCode != 0
|
||||
? throw new NetworkInformationException(errorCode)
|
||||
: NetworkInterface
|
||||
.GetAllNetworkInterfaces()
|
||||
.Where(item => item.GetIPProperties().GetIPv4Properties().Index == dwBestIfIndex)
|
||||
.FirstOrDefault();
|
||||
@ -49,19 +46,23 @@ namespace FastGithub.Dns
|
||||
/// <param name="nameServers"></param>
|
||||
/// <exception cref="NetworkInformationException"></exception>
|
||||
/// <exception cref="NotSupportedException"></exception>
|
||||
public static void SetNameServers(params IPAddress[] nameServers)
|
||||
/// <returns>未设置之前的记录</returns>
|
||||
public static IPAddress[] SetNameServers(params IPAddress[] nameServers)
|
||||
{
|
||||
var networkIF = GetBestNetworkInterface(www_baidu_com);
|
||||
if (networkIF == null)
|
||||
var networkInterface = GetBestNetworkInterface(www_baidu_com);
|
||||
if (networkInterface == null)
|
||||
{
|
||||
throw new NotSupportedException("找不到网络适配器用来设置dns");
|
||||
}
|
||||
var dnsAddresses = networkInterface.GetIPProperties().DnsAddresses.ToArray();
|
||||
|
||||
Netsh($@"interface ipv4 delete dns ""{networkIF.Name}"" all");
|
||||
Netsh($@"interface ipv4 delete dns ""{networkInterface.Name}"" all");
|
||||
foreach (var address in nameServers)
|
||||
{
|
||||
Netsh($@"interface ipv4 add dns ""{networkIF.Name}"" {address} validate=no");
|
||||
Netsh($@"interface ipv4 add dns ""{networkInterface.Name}"" {address} validate=no");
|
||||
}
|
||||
|
||||
return dnsAddresses;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user