Windows在内核层面处理了IPSEC的ESP报文,导致用户态绑定UDP4500或者RAW SOCKET绑定50(ESP)协议后,无法收到ESP报文(但SPI=0的UDP报文是可以收到的)。
谷歌找了很久解决方案,没有找到,感觉这是一条死路。
OSR帖子中的建议是用创建WFP驱动,在Windows之前拿到报文,并转发
https://community.osr.com/discussion/276938/default-ipsec-stack-dropping-esp-packets
那如果用上了WFP就简单了,我觉得最简单的办法就是在FWPM_LAYER_INBOUND_IPPACKET_V4和FWPM_LAYER_OUTBOUND_IPPACKET_V4层面,将4500端口号直接改掉就完事了,比如我改成45000,微软内置在tcpip中的ipsec能奈我何。