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 @@ - +