阅读:4740回复:13
(增加最简nat源码)passthru PtRecieve调用ndissend应该处理内存
在ptRecieve中
先做好合适的正确的包pPacketContent 然后 NdisAllocateBuffer(&Status,&FirstBuffer,send_handle,pPacketContent,len);//分配buffer,并把全局变量或在本函数上面定义的数据包地址pPacketContent中的 //内容复制到分配的buffer里 NdisChainBufferAtFront( MyPacket, FirstBuffer);//把刚分配的buffer设为要发送包MyPacket的第一个buffer Rsvd = (PRSVD)(MyPacket->ProtocolReserved); Rsvd->OriginalPkt = Packet; MyPacket->Private.Head->Next =NULL;//把buffer的链接下一个指针置0,即设置发送链表只有一个buffer元素 MyPacket->Private.Tail =NULL;//把Tail指针也置0 NdisSetPacketFlags(MyPacket, NDIS_FLAGS_DONT_LOOPBACK);//设置Flags*/ DBGPRINT(" to call ndissend start!n"); NdisSend(&Status,pAdapt->BindingHandle,MyPacket); *** C:NTDDKsrcnetworkndispassthruprotocol.c (1012) *** locate packet for mypacket from send_handle *** C:NTDDKsrcnetworkndispassthruprotocol.c (1047) *** copy packet to MyPacket finished *** C:NTDDKsrcnetworkndispassthruprotocol.c (1052) *** to call ndissend start!n *** Fatal System Error: 0x000000d1 (0x05018064,0x00000002,0x00000000,0xF40ADD81) 在ptRecieve中调用ndissend如何处理内存比较合理? [编辑 - 3/8/04 by lauer] |
|
最新喜欢:xiaoji... |
沙发#
发布于:2004-02-11 19:19
用ndissend!!!!
|
|
板凳#
发布于:2004-02-12 11:00
用ndissend发送如何处理内存才正确呢?
困扰中! [编辑 - 2/12/04 by lauer] |
|
地板#
发布于:2004-02-12 16:29
问题解决了
就是PtSendComplete是要自己释放载PtRecieve的Packet 而不能继续调用NdisMSendComplete 因为这个包不是Protocol层发出的, 不用还原原始包。 我测试完基本的Nat功能后就放一个最简nat源码上来! |
|
地下室#
发布于:2004-02-12 19:16
我也在做,只是有几个问题还没有解决。
希望多交流(lxyywj2002@163.com) 期待你的原马。 |
|
5楼#
发布于:2004-02-12 22:36
我也卡在这里,谢谢!
期待原码,(cantlong@sohu.com) |
|
6楼#
发布于:2004-02-13 15:20
刚刚测试完的passthru nat例子
实现: 在局域网内把一台机器来的udp或ip包在ndis层 更改mac地址和ip地址实现nat (发回原地本例仅是调换而已,更多的就看发挥了) 本例传输大数据依然存在很多问题 主要是内存分配和buffer链处理 希望有经验的大大给个指导 [编辑 - 2/13/04 by lauer] 这个例子有很多错误,我已经修改了很多 不过由于现在基本上已经完成了整个任务 基于工作上的原因,不能把新的代码放上来 只能写一些修改意见在我下面的贴子中。 [编辑 - 3/8/04 by lauer] |
|
|
7楼#
发布于:2004-03-04 20:57
几位做nat的老兄,能交流一下否?
我的QQ80442624 我觉得QQ交流比较好,邮件太慢了 歇息 |
|
8楼#
发布于:2004-03-08 14:39
楼主,能告诉我你的最后的调试信息是如何打出来的吗?应该不是DbgPrint吧。
|
|
9楼#
发布于:2004-03-08 14:45
当然是使用DbgPrint或DBGPRINT
借助vmware虚拟系统和com口使用windbg就可以 可方便的实现debug了 强烈推荐使用vmware调试ndis驱动 |
|
10楼#
发布于:2004-03-08 14:51
对于碰到的碎片包,
按照MpSend里的方法复制包的OOB数据等 同时对碎片不用修改协议层的端口等(碎片可能没有协议层) 就可以顺利的把碎片包发出 还有就是需要做一个队列把发送的包记住 这样再PtSendComplete时就了一区别对待是否自己发送的包 以保证在发送大包碎片时不会出错 如果需要做pat,那就麻烦多了--需要把碎片先存下来, 到齐了修改完了,再分别发出 |
|
11楼#
发布于:2008-12-25 17:08
最近我正为这个问题发愁,, 参考参考.......
我想通过上层的WRITEFILE来发送ARP包,,,在MDL中取得数据,,,可是一调用 NDISSEND 就蓝了... 谢谢楼上的各兄弟,, |
|
|
12楼#
发布于:2019-05-18 14:05
我是菜鸟,谁能告诉我在吗弄,有奖金哦,期待源码,1836463413@qq.com
|
|
13楼#
发布于:2020-08-11 11:06
多谢分享
|
|