简化packet修改
This commit is contained in:
parent
7c203971c1
commit
9f9cbce624
@ -119,38 +119,17 @@ namespace FastGithub.PacketIntercept.Dns
|
|||||||
var loopback = question.Type == RecordType.A ? IPAddress.Loopback : IPAddress.IPv6Loopback;
|
var loopback = question.Type == RecordType.A ? IPAddress.Loopback : IPAddress.IPv6Loopback;
|
||||||
var record = new IPAddressResourceRecord(domain, loopback, this.ttl);
|
var record = new IPAddressResourceRecord(domain, loopback, this.ttl);
|
||||||
response.AnswerRecords.Add(record);
|
response.AnswerRecords.Add(record);
|
||||||
var responsePayload = response.ToArray();
|
|
||||||
|
|
||||||
// 修改payload和包长
|
// 修改payload
|
||||||
packet.GetWriter(packet.Length - result.DataLength).Write(responsePayload);
|
var writer = packet.GetWriter(packet.Length - result.DataLength);
|
||||||
|
writer.Write(response.ToArray());
|
||||||
|
|
||||||
// 修改ip包
|
packet.ReverseEndPoint();
|
||||||
IPAddress destAddress;
|
packet.ApplyLengthToHeaders();
|
||||||
if (result.IPV4Header != null)
|
packet.CalcChecksums(addr);
|
||||||
{
|
packet.CalcOutboundFlag(addr);
|
||||||
destAddress = result.IPV4Header->DstAddr;
|
|
||||||
result.IPV4Header->DstAddr = result.IPV4Header->SrcAddr;
|
|
||||||
result.IPV4Header->SrcAddr = destAddress;
|
|
||||||
result.IPV4Header->Length = (ushort)packet.Length;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
destAddress = result.IPV6Header->DstAddr;
|
|
||||||
result.IPV6Header->DstAddr = result.IPV6Header->SrcAddr;
|
|
||||||
result.IPV6Header->SrcAddr = destAddress;
|
|
||||||
result.IPV6Header->Length = (ushort)(packet.Length - sizeof(IPV6Header));
|
|
||||||
}
|
|
||||||
|
|
||||||
// 修改udp包
|
|
||||||
var destPort = result.UdpHeader->DstPort;
|
|
||||||
result.UdpHeader->DstPort = result.UdpHeader->SrcPort;
|
|
||||||
result.UdpHeader->SrcPort = destPort;
|
|
||||||
result.UdpHeader->Length = (ushort)(sizeof(UdpHeader) + responsePayload.Length);
|
|
||||||
|
|
||||||
addr.Flags |= WinDivertAddressFlag.Impostor;
|
addr.Flags |= WinDivertAddressFlag.Impostor;
|
||||||
packet.CalcOutboundFlag(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.7" />
|
<PackageReference Include="WindivertDotnet" Version="1.1.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user