异常短路

This commit is contained in:
陈国伟 2021-09-24 12:49:13 +08:00
parent b9d8fccd77
commit 23c2e4f40f
3 changed files with 38 additions and 54 deletions

View File

@ -81,25 +81,22 @@ namespace FastGithub.PacketIntercept.Dns
DnsFlushResolverCache(); DnsFlushResolverCache();
while (cancellationToken.IsCancellationRequested == false) while (cancellationToken.IsCancellationRequested == false)
{ {
if (WinDivert.WinDivertRecv(handle, winDivertBuffer, ref winDivertAddress, ref packetLength)) if (WinDivert.WinDivertRecv(handle, winDivertBuffer, ref winDivertAddress, ref packetLength) == false)
{ {
try throw new Win32Exception();
{
this.ModifyDnsPacket(winDivertBuffer, ref winDivertAddress, ref packetLength);
}
catch (Exception ex)
{
this.logger.LogWarning(ex.Message);
}
finally
{
WinDivert.WinDivertSend(handle, winDivertBuffer, packetLength, ref winDivertAddress);
}
} }
else
try
{ {
var errorCode = Marshal.GetLastWin32Error(); this.ModifyDnsPacket(winDivertBuffer, ref winDivertAddress, ref packetLength);
throw new Win32Exception(errorCode); }
catch (Exception ex)
{
this.logger.LogWarning(ex.Message);
}
finally
{
WinDivert.WinDivertSend(handle, winDivertBuffer, packetLength, ref winDivertAddress);
} }
} }
} }

View File

@ -3,7 +3,6 @@ using System;
using System.Buffers.Binary; using System.Buffers.Binary;
using System.ComponentModel; using System.ComponentModel;
using System.Net; using System.Net;
using System.Runtime.InteropServices;
using System.Runtime.Versioning; using System.Runtime.Versioning;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -16,7 +15,7 @@ namespace FastGithub.PacketIntercept.Tcp
/// </summary> /// </summary>
[SupportedOSPlatform("windows")] [SupportedOSPlatform("windows")]
abstract class TcpInterceptor : ITcpInterceptor abstract class TcpInterceptor : ITcpInterceptor
{ {
private readonly string filter; private readonly string filter;
private readonly ushort oldServerPort; private readonly ushort oldServerPort;
private readonly ushort newServerPort; private readonly ushort newServerPort;
@ -52,7 +51,7 @@ namespace FastGithub.PacketIntercept.Tcp
var handle = WinDivert.WinDivertOpen(this.filter, WinDivertLayer.Network, 0, WinDivertOpenFlags.None); var handle = WinDivert.WinDivertOpen(this.filter, WinDivertLayer.Network, 0, WinDivertOpenFlags.None);
if (handle == IntPtr.MaxValue || handle == IntPtr.Zero) if (handle == IntPtr.MaxValue || handle == IntPtr.Zero)
{ {
const int ERROR_INVALID_HANDLE = 0x6; const int ERROR_INVALID_HANDLE = 0x6;
throw new Win32Exception(ERROR_INVALID_HANDLE, "打开驱动失败"); throw new Win32Exception(ERROR_INVALID_HANDLE, "打开驱动失败");
} }
@ -66,25 +65,22 @@ namespace FastGithub.PacketIntercept.Tcp
while (cancellationToken.IsCancellationRequested == false) while (cancellationToken.IsCancellationRequested == false)
{ {
if (WinDivert.WinDivertRecv(handle, winDivertBuffer, ref winDivertAddress, ref packetLength)) if (WinDivert.WinDivertRecv(handle, winDivertBuffer, ref winDivertAddress, ref packetLength) == false)
{ {
try throw new Win32Exception();
{
this.ModifyTcpPacket(winDivertBuffer, ref winDivertAddress, ref packetLength);
}
catch (Exception ex)
{
this.logger.LogWarning(ex.Message);
}
finally
{
WinDivert.WinDivertSend(handle, winDivertBuffer, packetLength, ref winDivertAddress);
}
} }
else
try
{ {
var errorCode = Marshal.GetLastWin32Error(); this.ModifyTcpPacket(winDivertBuffer, ref winDivertAddress, ref packetLength);
throw new Win32Exception(errorCode); }
catch (Exception ex)
{
this.logger.LogWarning(ex.Message);
}
finally
{
WinDivert.WinDivertSend(handle, winDivertBuffer, packetLength, ref winDivertAddress);
} }
} }
} }

View File

@ -39,17 +39,6 @@ namespace FastGithub
return base.StartAsync(cancellationToken); return base.StartAsync(cancellationToken);
} }
/// <summary>
/// 停止完成
/// </summary>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public override Task StopAsync(CancellationToken cancellationToken)
{
this.logger.LogInformation($"{nameof(FastGithub)}已停止运行");
return base.StopAsync(cancellationToken);
}
/// <summary> /// <summary>
/// 后台任务 /// 后台任务
/// </summary> /// </summary>
@ -57,14 +46,16 @@ namespace FastGithub
/// <returns></returns> /// <returns></returns>
protected override async Task ExecuteAsync(CancellationToken stoppingToken) protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{ {
if (OperatingSystem.IsWindows() == false) if (OperatingSystem.IsWindows())
{ {
await Task.Delay(TimeSpan.FromSeconds(1d), stoppingToken); return;
if (await this.UseFastGithubProxyAsync() == false) }
{
var httpProxyPort = this.options.Value.HttpProxyPort; await Task.Delay(TimeSpan.FromSeconds(1d), stoppingToken);
this.logger.LogWarning($"请设置系统自动代理为http://{IPAddress.Loopback}:{httpProxyPort}或手动代理http/https为{IPAddress.Loopback}:{httpProxyPort}"); 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 try
{ {
var addresses = await System.Net.Dns.GetHostAddressesAsync(proxyServer.Host); var addresses = await Dns.GetHostAddressesAsync(proxyServer.Host);
return addresses.Contains(IPAddress.Loopback); return addresses.Contains(IPAddress.Loopback);
} }
catch (Exception) catch (Exception)