From 9f9cbce624310c207b01699de2a5818a742e11ca Mon Sep 17 00:00:00 2001
From: xljiulang <366193849@qq.com>
Date: Fri, 28 Oct 2022 21:41:01 +0800
Subject: [PATCH] =?UTF-8?q?=E7=AE=80=E5=8C=96packet=E4=BF=AE=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Dns/DnsInterceptor.cs | 35 ++++---------------
.../FastGithub.PacketIntercept.csproj | 2 +-
2 files changed, 8 insertions(+), 29 deletions(-)
diff --git a/FastGithub.PacketIntercept/Dns/DnsInterceptor.cs b/FastGithub.PacketIntercept/Dns/DnsInterceptor.cs
index a6feecf..118902f 100644
--- a/FastGithub.PacketIntercept/Dns/DnsInterceptor.cs
+++ b/FastGithub.PacketIntercept/Dns/DnsInterceptor.cs
@@ -119,38 +119,17 @@ namespace FastGithub.PacketIntercept.Dns
var loopback = question.Type == RecordType.A ? IPAddress.Loopback : IPAddress.IPv6Loopback;
var record = new IPAddressResourceRecord(domain, loopback, this.ttl);
response.AnswerRecords.Add(record);
- var responsePayload = response.ToArray();
- // 修改payload和包长
- packet.GetWriter(packet.Length - result.DataLength).Write(responsePayload);
+ // 修改payload
+ var writer = packet.GetWriter(packet.Length - result.DataLength);
+ writer.Write(response.ToArray());
- // 修改ip包
- IPAddress destAddress;
- if (result.IPV4Header != null)
- {
- 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);
+ packet.ReverseEndPoint();
+ packet.ApplyLengthToHeaders();
+ packet.CalcChecksums(addr);
+ packet.CalcOutboundFlag(addr);
addr.Flags |= WinDivertAddressFlag.Impostor;
- packet.CalcOutboundFlag(addr);
- packet.CalcChecksums(addr);
-
this.logger.LogInformation($"{domain}->{loopback}");
}
diff --git a/FastGithub.PacketIntercept/FastGithub.PacketIntercept.csproj b/FastGithub.PacketIntercept/FastGithub.PacketIntercept.csproj
index 62c1960..bfa9517 100644
--- a/FastGithub.PacketIntercept/FastGithub.PacketIntercept.csproj
+++ b/FastGithub.PacketIntercept/FastGithub.PacketIntercept.csproj
@@ -7,7 +7,7 @@
-
+