用NDIS中的passthru实现NAT的若干问题....

7 2001-11-19 04:58:02
请多帮忙,谢谢!

1.ndis的相关信息来源除了ddk文档和驱动开发网(driverdevelop.com)以外,还有哪些网站有详细介绍或讨论?


2.对于NDIS_PACKET这个结构
typedef struct _NDIS_PACKET {

NDIS_PACKET_PRIVATE Private;
union {
struct {
UCHAR MiniportReserved[2*sizeof(PVOID)];
UCHAR WrapperReserved[2*sizeof(PVOID)];
};
struct {
UCHAR MiniportReservedEx[3*sizeof(PVOID)];
UCHAR WrapperReservedEx[sizeof(PVOID)];
};
struct {
UCHAR MacReserved[4*sizeof(PVOID)];
};
};
ULONG_PTR Reserved[2];
UCHAR ProtocolReserved[1];
} NDIS_PACKET, *PNDIS_PACKET, **PPNDIS_PACKET;

看了介绍后仍不太明白,有很多疑问.
例如:NDIS_PACKET_PRIVATE这个结构,我就不知道它的具体定义,在ddk中找不到.对于Packet->Private.Head这样的应用自然不明白了.
别的地方有更详细的介绍么?


3.我用的是2000ddk编译,softice4.0调试.不知道DBGPRINT()的输出在哪里能看到?


4.在PtRecivePacket里,
能不能先NdisAllocatePacket(......,newpacket,....),
接着NdisAllocateMemory(VirtualAddress,.....),
然后将原有packet里的buffer链表依次copy到VirtualAddress所指的空间,
再NdisAllocateBuffer(....,newbuffer,..,VirtualAddress,...),
再循环调用NdisUnchainBufferAtFront(packet,buffer)和NdisFreeBuffer(buffer)释放原packet占用的内存.
.............(这里可以对newbuffer进行处理,过滤).
把copy好的newbuffer用NdisChainBufferAtFront(newpacket,newbuffer)链接到newpacket上.
下面再转发的时候,就转发这个新构造的packet.新分配的内存,packet在PtReceiveComplete的时候进行释放.
这样处理可行么?


5.上面只copy了packet里的raw data,对于oob数据要怎么copy到新packet中呢?
具体有哪些oob数据,属性要copy?


6.有没有什么函数可以从本机所有未用的port中分配出一个,此port在未收回之前不再进行分配.
相应的一个函数将上面分配的port在使用结束后进行收回.
这两个函数我想在作NAT转换时应用.

...全文
410 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenm001 2002-01-04
  • 打赏
  • 举报
回复
你可以拦截每一个发往外部的IP数据包,难道不能得到端口号?未使用的不就是NAT中的可用端口号了?!不要总指望别人或比尔告诉你!
killers 2001-12-16
  • 打赏
  • 举报
回复
passthru完全适合做nat,我正在做这件事情,
需要在应用层得到没有帮定的端口
www.safe123.com
这里有驱动板块大家可以来看看
yoboo_yb 2001-11-28
  • 打赏
  • 举报
回复
我也弄明白!强烈关注!呵呵
7 2001-11-27
  • 打赏
  • 举报
回复
差不多
yoboo_yb 2001-11-27
  • 打赏
  • 举报
回复
你是不是做防火墙?
7 2001-11-27
  • 打赏
  • 举报
回复
请多帮忙啊~~

谢谢!
7 2001-11-26
  • 打赏
  • 举报
回复
第2--5问题作废

剩余问题:

1.ndis的相关信息来源除了ddk文档和驱动开发网(driverdevelop.com)以外,还有哪些网站有详细介绍或讨论?


6.如何知道本机有哪些port空闲(范围:1024--65535).得到了后怎么把它设置为已使用?
whz_time 2001-11-26
  • 打赏
  • 举报
回复
这个帖子非常好,菜鸟想听听各位高手的讨论。
shen630 2001-11-24
  • 打赏
  • 举报
回复
再关注!
yoboo_yb 2001-11-23
  • 打赏
  • 举报
回复
再关注!
7 2001-11-21
  • 打赏
  • 举报
回复
倒了..............

也可以,把网卡设为混杂模式就行了.

不过重点是拦截数据包.

有人知道怎么知道本机还有哪些未用的port么?
7 2001-11-21
  • 打赏
  • 举报
回复
倒了..............

也可以,把网卡设为混杂模式就行了.

不过重点是拦截数据包.

有人知道怎么知道本机还有哪些未用的port么?
shen630 2001-11-21
  • 打赏
  • 举报
回复
能实现sniffer功能吗?
7 2001-11-21
  • 打赏
  • 举报
回复
大家帮帮忙啊!

多讨论讨论嘛.............
7 2001-11-21
  • 打赏
  • 举报
回复
大家帮帮忙啊! 多讨论讨论嘛.................
yoboo_yb 2001-11-20
  • 打赏
  • 举报
回复
强烈关注!
7 2001-11-19
  • 打赏
  • 举报
回复
hook_device_service?
repus 2001-11-19
  • 打赏
  • 举报
回复
我认为NAT用IP Hook比较合适吧。
7 2001-11-19
  • 打赏
  • 举报
回复
谢谢指点!

在IM层做NAT不合适? 您的意见是............
repus 2001-11-19
  • 打赏
  • 举报
回复
1.ddk文档已经很详细了,仔细看。
2.ddk头文件里绝对找得到,用搜索嘛,不过有兴趣你慢慢看,要效率看文档。
3.输出信息用DriverMonitor看,SoftIce没有的话找一个DriverWorks。

个人意见:在Protocol Driver和Hardware Driver之间做NAT不合适,我不敢说不可能,毕竟天下之大...,不过如果很在意“有没有什么函数...”恐怕最终的结果只有放弃,说得不太中听,请原谅。

4,386

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧