@@ -119,38 +119,17 @@ unsafe private void ModifyDnsPacket(WinDivertPacket packet, WinDivertAddress add
119119 var loopback = question . Type == RecordType . A ? IPAddress . Loopback : IPAddress . IPv6Loopback ;
120120 var record = new IPAddressResourceRecord ( domain , loopback , this . ttl ) ;
121121 response . AnswerRecords . Add ( record ) ;
122- var responsePayload = response . ToArray ( ) ;
123122
124- // 修改payload和包长
125- packet . GetWriter ( packet . Length - result . DataLength ) . Write ( responsePayload ) ;
123+ // 修改payload
124+ var writer = packet . GetWriter ( packet . Length - result . DataLength ) ;
125+ writer . Write ( response . ToArray ( ) ) ;
126126
127- // 修改ip包
128- IPAddress destAddress ;
129- if ( result . IPV4Header != null )
130- {
131- destAddress = result . IPV4Header ->DstAddr ;
132- result . IPV4Header ->DstAddr = result . IPV4Header ->SrcAddr ;
133- result . IPV4Header ->SrcAddr = destAddress ;
134- result . IPV4Header ->Length = ( ushort ) packet . Length ;
135- }
136- else
137- {
138- destAddress = result . IPV6Header ->DstAddr ;
139- result . IPV6Header ->DstAddr = result . IPV6Header ->SrcAddr ;
140- result . IPV6Header ->SrcAddr = destAddress ;
141- result . IPV6Header ->Length = ( ushort ) ( packet . Length - sizeof ( IPV6Header ) ) ;
142- }
143-
144- // 修改udp包
145- var destPort = result . UdpHeader ->DstPort ;
146- result . UdpHeader ->DstPort = result . UdpHeader ->SrcPort ;
147- result . UdpHeader ->SrcPort = destPort ;
148- result . UdpHeader ->Length = ( ushort ) ( sizeof ( UdpHeader ) + responsePayload . Length ) ;
149-
150- addr . Flags |= WinDivertAddressFlag . Impostor ;
151- packet . CalcOutboundFlag ( addr ) ;
127+ packet . ReverseEndPoint ( ) ;
128+ packet . ApplyLengthToHeaders ( ) ;
152129 packet . CalcChecksums ( addr ) ;
130+ packet . CalcOutboundFlag ( addr ) ;
153131
132+ addr . Flags |= WinDivertAddressFlag . Impostor ;
154133 this . logger . LogInformation ( $ "{ domain } ->{ loopback } ") ;
155134 }
156135
0 commit comments