WindivertDotnet异步
This commit is contained in:
parent
d976cf58e5
commit
aa99fdafac
@ -60,8 +60,6 @@ namespace FastGithub.PacketIntercept.Dns
|
||||
/// <returns></returns>
|
||||
public async Task InterceptAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
await Task.Yield();
|
||||
|
||||
using var divert = new WinDivert(filter, WinDivertLayer.Network);
|
||||
cancellationToken.Register(d =>
|
||||
{
|
||||
@ -69,16 +67,16 @@ namespace FastGithub.PacketIntercept.Dns
|
||||
DnsFlushResolverCache();
|
||||
}, divert);
|
||||
|
||||
var addr = new WinDivertAddress();
|
||||
using var packet = new WinDivertPacket();
|
||||
using var addr = new WinDivertAddress();
|
||||
|
||||
DnsFlushResolverCache();
|
||||
while (cancellationToken.IsCancellationRequested == false)
|
||||
{
|
||||
divert.Recv(packet, ref addr);
|
||||
await divert.RecvAsync(packet, addr);
|
||||
try
|
||||
{
|
||||
this.ModifyDnsPacket(packet, ref addr);
|
||||
this.ModifyDnsPacket(packet, addr);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@ -86,7 +84,7 @@ namespace FastGithub.PacketIntercept.Dns
|
||||
}
|
||||
finally
|
||||
{
|
||||
divert.Send(packet, ref addr);
|
||||
await divert.SendAsync(packet, addr);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -96,7 +94,7 @@ namespace FastGithub.PacketIntercept.Dns
|
||||
/// </summary>
|
||||
/// <param name="packet"></param>
|
||||
/// <param name="addr"></param>
|
||||
unsafe private void ModifyDnsPacket(WinDivertPacket packet, ref WinDivertAddress addr)
|
||||
unsafe private void ModifyDnsPacket(WinDivertPacket packet, WinDivertAddress addr)
|
||||
{
|
||||
var result = packet.GetParseResult();
|
||||
var requestPayload = result.DataSpan.ToArray();
|
||||
@ -164,7 +162,7 @@ namespace FastGithub.PacketIntercept.Dns
|
||||
addr.Flags ^= WinDivertAddressFlag.Outbound;
|
||||
}
|
||||
|
||||
packet.CalcChecksums(ref addr);
|
||||
packet.CalcChecksums(addr);
|
||||
this.logger.LogInformation($"{domain}->{loopback}");
|
||||
}
|
||||
|
||||
|
||||
@ -7,7 +7,7 @@
|
||||
<ItemGroup>
|
||||
<FrameworkReference Include="Microsoft.AspNetCore.App" />
|
||||
<PackageReference Include="DNS" Version="7.0.0" />
|
||||
<PackageReference Include="WindivertDotnet" Version="1.0.0-beta2" />
|
||||
<PackageReference Include="WindivertDotnet" Version="1.0.0-rc3" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@ -50,8 +50,6 @@ namespace FastGithub.PacketIntercept.Tcp
|
||||
return;
|
||||
}
|
||||
|
||||
await Task.Yield();
|
||||
|
||||
using var divert = new WinDivert(this.filter, WinDivertLayer.Network, 0, WinDivertFlag.None);
|
||||
if (Socket.OSSupportsIPv4)
|
||||
{
|
||||
@ -63,16 +61,14 @@ namespace FastGithub.PacketIntercept.Tcp
|
||||
}
|
||||
cancellationToken.Register(d => ((WinDivert)d!).Dispose(), divert);
|
||||
|
||||
var addr = new WinDivertAddress();
|
||||
using var packet = new WinDivertPacket();
|
||||
using var addr = new WinDivertAddress();
|
||||
while (cancellationToken.IsCancellationRequested == false)
|
||||
{
|
||||
addr.Clear();
|
||||
divert.Recv(packet, ref addr);
|
||||
|
||||
await divert.RecvAsync(packet, addr);
|
||||
try
|
||||
{
|
||||
this.ModifyTcpPacket(packet, ref addr);
|
||||
this.ModifyTcpPacket(packet, addr);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@ -80,7 +76,7 @@ namespace FastGithub.PacketIntercept.Tcp
|
||||
}
|
||||
finally
|
||||
{
|
||||
divert.Send(packet, ref addr);
|
||||
await divert.SendAsync(packet, addr);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -90,7 +86,7 @@ namespace FastGithub.PacketIntercept.Tcp
|
||||
/// </summary>
|
||||
/// <param name="packet"></param>
|
||||
/// <param name="addr"></param>
|
||||
unsafe private void ModifyTcpPacket(WinDivertPacket packet, ref WinDivertAddress addr)
|
||||
unsafe private void ModifyTcpPacket(WinDivertPacket packet, WinDivertAddress addr)
|
||||
{
|
||||
var result = packet.GetParseResult();
|
||||
if (result.IPV4Header != null && result.IPV4Header->SrcAddr.Equals(IPAddress.Loopback) == false)
|
||||
@ -111,7 +107,7 @@ namespace FastGithub.PacketIntercept.Tcp
|
||||
result.TcpHeader->SrcPort = oldServerPort;
|
||||
}
|
||||
addr.Flags |= WinDivertAddressFlag.Impostor;
|
||||
packet.CalcChecksums(ref addr);
|
||||
packet.CalcChecksums(addr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user