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