diff --git a/FastGithub.PacketIntercept/Dns/DnsInterceptor.cs b/FastGithub.PacketIntercept/Dns/DnsInterceptor.cs index ad8ad1e..70a7d38 100644 --- a/FastGithub.PacketIntercept/Dns/DnsInterceptor.cs +++ b/FastGithub.PacketIntercept/Dns/DnsInterceptor.cs @@ -81,25 +81,22 @@ namespace FastGithub.PacketIntercept.Dns DnsFlushResolverCache(); while (cancellationToken.IsCancellationRequested == false) { - if (WinDivert.WinDivertRecv(handle, winDivertBuffer, ref winDivertAddress, ref packetLength)) + if (WinDivert.WinDivertRecv(handle, winDivertBuffer, ref winDivertAddress, ref packetLength) == false) { - try - { - this.ModifyDnsPacket(winDivertBuffer, ref winDivertAddress, ref packetLength); - } - catch (Exception ex) - { - this.logger.LogWarning(ex.Message); - } - finally - { - WinDivert.WinDivertSend(handle, winDivertBuffer, packetLength, ref winDivertAddress); - } + throw new Win32Exception(); } - else + + try { - var errorCode = Marshal.GetLastWin32Error(); - throw new Win32Exception(errorCode); + this.ModifyDnsPacket(winDivertBuffer, ref winDivertAddress, ref packetLength); + } + catch (Exception ex) + { + this.logger.LogWarning(ex.Message); + } + finally + { + WinDivert.WinDivertSend(handle, winDivertBuffer, packetLength, ref winDivertAddress); } } } diff --git a/FastGithub.PacketIntercept/Tcp/TcpInterceptor.cs b/FastGithub.PacketIntercept/Tcp/TcpInterceptor.cs index 4b49299..2dfd4c7 100644 --- a/FastGithub.PacketIntercept/Tcp/TcpInterceptor.cs +++ b/FastGithub.PacketIntercept/Tcp/TcpInterceptor.cs @@ -3,7 +3,6 @@ using System; using System.Buffers.Binary; using System.ComponentModel; using System.Net; -using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Threading; using System.Threading.Tasks; @@ -16,7 +15,7 @@ namespace FastGithub.PacketIntercept.Tcp /// [SupportedOSPlatform("windows")] abstract class TcpInterceptor : ITcpInterceptor - { + { private readonly string filter; private readonly ushort oldServerPort; private readonly ushort newServerPort; @@ -52,7 +51,7 @@ namespace FastGithub.PacketIntercept.Tcp var handle = WinDivert.WinDivertOpen(this.filter, WinDivertLayer.Network, 0, WinDivertOpenFlags.None); if (handle == IntPtr.MaxValue || handle == IntPtr.Zero) - { + { const int ERROR_INVALID_HANDLE = 0x6; throw new Win32Exception(ERROR_INVALID_HANDLE, "打开驱动失败"); } @@ -66,25 +65,22 @@ namespace FastGithub.PacketIntercept.Tcp while (cancellationToken.IsCancellationRequested == false) { - if (WinDivert.WinDivertRecv(handle, winDivertBuffer, ref winDivertAddress, ref packetLength)) + if (WinDivert.WinDivertRecv(handle, winDivertBuffer, ref winDivertAddress, ref packetLength) == false) { - try - { - this.ModifyTcpPacket(winDivertBuffer, ref winDivertAddress, ref packetLength); - } - catch (Exception ex) - { - this.logger.LogWarning(ex.Message); - } - finally - { - WinDivert.WinDivertSend(handle, winDivertBuffer, packetLength, ref winDivertAddress); - } + throw new Win32Exception(); } - else + + try { - var errorCode = Marshal.GetLastWin32Error(); - throw new Win32Exception(errorCode); + this.ModifyTcpPacket(winDivertBuffer, ref winDivertAddress, ref packetLength); + } + catch (Exception ex) + { + this.logger.LogWarning(ex.Message); + } + finally + { + WinDivert.WinDivertSend(handle, winDivertBuffer, packetLength, ref winDivertAddress); } } } diff --git a/FastGithub/AppHostedService.cs b/FastGithub/AppHostedService.cs index 38f00d9..7baf2fc 100644 --- a/FastGithub/AppHostedService.cs +++ b/FastGithub/AppHostedService.cs @@ -39,17 +39,6 @@ namespace FastGithub return base.StartAsync(cancellationToken); } - /// - /// 停止完成 - /// - /// - /// - public override Task StopAsync(CancellationToken cancellationToken) - { - this.logger.LogInformation($"{nameof(FastGithub)}已停止运行"); - return base.StopAsync(cancellationToken); - } - /// /// 后台任务 /// @@ -57,14 +46,16 @@ namespace FastGithub /// protected override async Task ExecuteAsync(CancellationToken stoppingToken) { - if (OperatingSystem.IsWindows() == false) + if (OperatingSystem.IsWindows()) { - await Task.Delay(TimeSpan.FromSeconds(1d), stoppingToken); - if (await this.UseFastGithubProxyAsync() == false) - { - var httpProxyPort = this.options.Value.HttpProxyPort; - this.logger.LogWarning($"请设置系统自动代理为http://{IPAddress.Loopback}:{httpProxyPort},或手动代理http/https为{IPAddress.Loopback}:{httpProxyPort}"); - } + return; + } + + await Task.Delay(TimeSpan.FromSeconds(1d), stoppingToken); + if (await this.UseFastGithubProxyAsync() == false) + { + var httpProxyPort = this.options.Value.HttpProxyPort; + this.logger.LogWarning($"请设置系统自动代理为http://{IPAddress.Loopback}:{httpProxyPort},或手动代理http/https为{IPAddress.Loopback}:{httpProxyPort}"); } } @@ -108,7 +99,7 @@ namespace FastGithub try { - var addresses = await System.Net.Dns.GetHostAddressesAsync(proxyServer.Host); + var addresses = await Dns.GetHostAddressesAsync(proxyServer.Host); return addresses.Contains(IPAddress.Loopback); } catch (Exception)