basil00 / WinDivert

WinDivert: Windows Packet Divert
https://reqrypt.org/windivert.html
Other
2.56k stars 512 forks source link

Passthru: Invalid ip checksum on loopback packet causing error #305

Open SizzlingCalamari opened 2 years ago

SizzlingCalamari commented 2 years ago

When passthru is running, WinDivertRecvEx is showing packets from the client to the server as not having valid ip checksums (addr->IPChecksum is 0). A missing ip checksum makes sense because checksum offload is enabled, but causes passthru to fail because WinDivertSendEx expects valid checksums from the addr.

I'm not sure where afterwards in the chain the failure happens, but adding a call to WinDivertHelperCalcChecksums before WinDivertSendEx allows passthru to work in my case.

Is there something here that needs fixing in WinDivertSendEx? or is it the sample code that's just incorrect?

SizzlingCalamari commented 2 years ago

To be clear, WinDivertSendEx is not returning false, it just silently fails.

basil00 commented 2 years ago

If addr->IPChecksum is zero, then it should still be possible to inject the packet with WinDivertSendEx. In this case, the driver is supposed to call WinDivertHelperCalcChecksums internally.

So I am not sure why it would not be working. I will try to do some testing and get back on this.