阅读:1519回复:3
PIM问题
我把PIM的代码改了下,主要思路如下:
1。设2条主链,一条放发送的包,一条放接收的包。 2。发送和接收时,先把包复制一份,放进链表。 每个在链表里的包的包内容都是连续的,就是说我把数据都拷贝到了一个连续的内存块里了。 3。具体的接收和发送,在PIM的TIMER函数里做,对这2条链表轮循,非空就调用原函数发送或接收。 现象: 在局域网中PING别的机器,没有问题,包括PING 60000的包都没有问题。但是使用拨号时,PING一个INTERNET地址却不能PING通! 这现象只在WIN-ME下有,在98下,无论局域网还是拨号PING INTERNET地址都没有问题。ME 和 98 PING的是同一个INTERNET地址。 我跟踪了下发送和接收数据,发现发送时,我截获的数据是在拨号处理以前的数据(没有那个PPP头,不知道是不是叫PPP头,呵呵),但是截获到的接收数据,却是有PPP头的,也就是说IP头不是跟在MAC头后面。中间插了8个字节。 我想这里肯定有人碰到过这问题,请问是怎么解决的,或者给我出点主意也好。还有,能不能让我就截到象PASSTHRU那样的数据,我不想要那个该死的PPP头。谢了先! |
|
沙发#
发布于:2003-07-16 13:35
你用的是那个pim?
我们早就用它实现过了包过滤功能,没有问题。 |
|
板凳#
发布于:2003-07-16 15:21
搞定了,原来是这样的,先过滤到有PPP头的包,然后马上就能截获已经被去掉了PPP头的包。
但是有点奇怪,为什么没有PPP头的那个包我用它原始的ReceiveHanlder接收时要调用TCPH_NdisTransferData函数呢?是不是操作系统把我的包数据拷贝到操作系统的PACKET中? 我对98系统不是很熟,欢迎大家讨论。 |
|
地板#
发布于:2003-07-16 17:11
呵呵
|
|