NDIS TCP 本地发包转向到本地端口的问题
嗨,大家好,驱动新人,驱零三个月,请多指教。
小弟最近碰到一个问题,在IM Filter中,想要把本机发往服务器的流量重定向到本机的指定端口,经过处理后,再进行后续操作。
设置了Package的Flag为NDIS_FLAGS_LOOPBACK_ONLY,修改了包的Mac, Ip, Port,重新作了CheckSum,可以看到本地也收到了这个包,是一个SYN包,但是系统却没有再发响应包,不知为何。望大神指点一二。
本机Socket:192.168.18.41:1274,目标服务器:192.168.18.3:80,想要转向的监听:192.168.18.41:43210
17:26:03>OnSend>原始包>PakFlag: [0082] 00-0C-29-FD-30-CD:192.168.18.41:1274 --> 14-DA-E9-77-34-9F:192.168.18.3:80
17:26:03>OnSend>重打包>PakFlag: [0102] 00-0C-29-FD-30-CD:192.168.18.41:1274 --> 00-0C-29-FD-30-CD:192.168.18.41:43210
17:26:03>OnRecv>原始包>PakFlag: [0100] 00-0C-29-FD-30-CD:192.168.18.41:1274 --> 00-0C-29-FD-30-CD:192.168.18.41:43210
17:26:03>OnRecv>重打包>PakFlag: [0002] 00-0C-29-FD-30-CD:192.168.18.41:1274 --> 00-0C-29-FD-30-CD:192.168.18.41:43210
---------------------------------------------------------------------------------------
17:26:06>OnSend>原始包>PakFlag: [0082] 00-0C-29-FD-30-CD:192.168.18.41:1274 --> 14-DA-E9-77-34-9F:192.168.18.3:80
17:26:06>OnSend>重打包>PakFlag: [0102] 00-0C-29-FD-30-CD:192.168.18.41:1274 --> 00-0C-29-FD-30-CD:192.168.18.41:43210
17:26:06>OnRecv>原始包>PakFlag: [0100] 00-0C-29-FD-30-CD:192.168.18.41:1274 --> 00-0C-29-FD-30-CD:192.168.18.41:43210
17:26:06>OnRecv>重打包>PakFlag: [0002] 00-0C-29-FD-30-CD:192.168.18.41:1274 --> 00-0C-29-FD-30-CD:192.168.18.41:43210
这里,是TCP握手的第一个SYN包的发送和接收;
第一、二行,是发送前后对比,第三、四行是接收前后对比。
第五六七八行,就TCP的超时重发。
PakFlag: 0x0002是 NDIS_PROTOCOL_ID_TCP_IP
PakFlag: 0x0082是 NDIS_PROTOCOL_ID_TCP_IP | NDIS_FLAGS_DONT_LOOPBACK
PakFlag: 0x0100是 NDIS_FLAGS_IS_LOOPBACK_PACKET
PakFlag: 0x0102是 NDIS_PROTOCOL_ID_TCP_IP | NDIS_FLAGS_IS_LOOPBACK_PACKET
我之前实验过,如果是在其他机器上,建立43210端口的监听,这种转向,是没问题的,建立TCP连接,发送和回复数据都没有问题;
可是,在本机建立监听,就不行了。可能还是回环的机制我没有弄明白。
大家能不能帮我看看,是什么问题么?提供思路,不胜感激。