whiteyoung
驱动牛犊
驱动牛犊
  • 注册日期2004-03-28
  • 最后登录2004-11-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1646回复:4

为什么在老式网卡上调通的mpsend到新式网卡上就不能用了呢?

楼主#
更多 发布于:2004-06-18 21:29
在论坛上看的一个修改发包的源码,修改了MPSend和PTSendComplete的程序,在老式网卡上是可以运行的,好像是zuozi写的吧,但是到了intel的新网卡上就不灵了,我已经在passthru.c中把MPSendPackets给注释掉了呀,不修改包的内容的话没有问题,修改完后连收包都收不到了,事情很急,那位碰上过这种情况给指点一下吧,郁闷了好久了
canoe982
驱动牛犊
驱动牛犊
  • 注册日期2003-04-11
  • 最后登录2005-12-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-06-19 07:25
Intel的网卡很可能是通过MPSendPackets发送包的。MPSendPackets与MPSend只有一个会工作,具体情况取决于网卡的型号,asmsys在谈到MPReceivePackets与MPReceive的区别时讲得很详细。
独怜幽草涧边生, 上有黄鹂深树鸣。 春潮带雨晚来急, 野渡无人舟自横。
whiteyoung
驱动牛犊
驱动牛犊
  • 注册日期2004-03-28
  • 最后登录2004-11-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-06-19 10:21
首先谢谢canoe982的回答。下面是我的调试过程,希望能把问题说得明白一些。

    我是这样调试的,首先不改动MS的passthru例程,在passthru.c里面确实只有MChars.SendHandler = MPSend; (MChars.SendPacketsHandler = MPSendPackets;)这句是被注释掉的,我打印调试信息出来后,确实只走MPSend;然后我又将PChars.ReceivePacketHandler = PtReceivePacket;修改为
PChars.ReceivePacketHandler = NULL;修改后收包发包也没有任何问题,也不走PtReceivePacket了,只从PtReceive中经过。

    然后我在PTReceive中修改收到的包也没有问题,用Packet = NdisGetReceivedPacket(pAdapt->BindingHandle, MacReceiveContext);得到的Packet是不为空的,但是当我把在MPSend中修改发包的模块一弄上去,并且修改PTSendComplete,程序就不正常工作了。我试着连一台ftp服务器,并在那台服务器上抓包,发现客户端在不停的发SYN包,但是服务器端却不回应。在MPSend中我只是新生成了一个与原来内容相同的包,还没有改包的内容呢。
canoe982
驱动牛犊
驱动牛犊
  • 注册日期2003-04-11
  • 最后登录2005-12-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-06-19 16:07
我想可能你修改了之后,根本就没有转发。Passthru本身实现的就是这种功能,只是把包拷贝了一份,然后转发出去。你可以认真的分析一些整个过程。
独怜幽草涧边生, 上有黄鹂深树鸣。 春潮带雨晚来急, 野渡无人舟自横。
LinX
驱动牛犊
驱动牛犊
  • 注册日期2002-08-19
  • 最后登录2007-07-05
  • 粉丝0
  • 关注0
  • 积分100分
  • 威望10点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-06-20 16:37
当同时注册MPSend和MPSendPackets, NDIS从不调用MPSend, 而只会调用MPSendPackets! 初步估计你在MPSend中从新组PACKET有问题! 注意, 从上层传递来的PACKET是"只读"的, 不能够修改它! 你必须从新分配内存来复制原来的PACKET, 再发送出去! 另外, 这与接收PACKET没有关系.
游客

返回顶部