darkme
驱动牛犊
驱动牛犊
  • 注册日期2004-07-17
  • 最后登录2006-03-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1467回复:9

monkeyy等高手请进!!!(150分请教)

楼主#
更多 发布于:2004-08-27 11:15
monkeyy以及进来的诸位高手:您们好!
我在该版面上看了很多你写的关于在wince下实现NDIS的帖子。我是一个新手,看NDIS有半个月了吧。在NDIS版掘金之后已经能够让passhtru在win2k下显示网卡截包的信息。
由于我最终是要将passthru移植到wince下,加之之间紧迫,需要对此有一个基本了解。自己查看资料和动手做试验是必须的,不过先到论坛上问问老大也是加速进度的好办法:)

所以在此请教monkeyy一些问题。
1、关于开发环境。
现有的设备:Pocket PC(wince3.0)、Lucent silverCard
开发工具:Platform Builder4.0

除了这些还需要什么东西吗?
是否需要EMC?还有PPC SDK?

2、passthru能够捕获安装在win2k上的无线网卡发送和接受的数据包。不过没有枚举无线媒介(NdisMediumWirelessWan),不知道这对passthru最终的运行会不会有影响。

3、是一个基本概念问题。
在windows下IMD捕获的包都包含了以太网头部。我所作的工作需要修改IP头部,因此我也不得不去修改对应的MAC头部。我想问一下,有没有可以直接捕获IP包的技术,同时需要能够像IMD那样能够对捕获的包进行缓存以及根据需要进行修改和发送。

先想到这些,这段时间努力学习wince下的驱动开发。还有问题继续发问。

请高手们不吝赐教。小弟多多谢过,分数多多奉上。
darkme
驱动牛犊
驱动牛犊
  • 注册日期2004-07-17
  • 最后登录2006-03-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-08-27 11:20
附上我的联系方式:
E-mail:yiyang2000@eyou.com
请高手们多多执教。

[编辑 -  5/25/05 by  darkme]
darkme
驱动牛犊
驱动牛犊
  • 注册日期2004-07-17
  • 最后登录2006-03-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-08-27 11:26
还有一个很重要的问题:
passthru移植到wince下,要做的修改大吗?

我知道这个问题提得很笼统,原因是我对此一无所知。不过我想做过这方面得高手们应该会有一些自己的感受。小弟在此恭听。
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-08-27 13:11
"
在windows下IMD捕获的包都包含了以太网头部。我所作的工作需要修改IP头部,因此我也不得不去修改对应的MAC头部。我想问一下,有没有可以直接捕获IP包的技术,同时需要能够像IMD那样能够对捕获的包进行缓存以及根据需要进行修改和发送。
"
2k下Ndis还作过些,直接捕获ip包?在Imd里面捕获的包除了14个字节的Mac头部以外就是ip包啊,你可以直接用,mac头除了6字节源,6字节目地址外是2字节上层包类型字段,整个mac头没有更多的动作要做,你提取出ip包处理后直接把mac头加回去就可以了。对了,你需要先了解那几个数据结构来找到Mac帧在哪里。
根据地的兄弟们,团结就是力量
darkme
驱动牛犊
驱动牛犊
  • 注册日期2004-07-17
  • 最后登录2006-03-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-08-27 14:22
"
在windows下IMD捕获的包都包含了以太网头部。我所作的工作需要修改IP头部,因此我也不得不去修改对应的MAC头部。我想问一下,有没有可以直接捕获IP包的技术,同时需要能够像IMD那样能够对捕获的包进行缓存以及根据需要进行修改和发送。
"
2k下Ndis还作过些,直接捕获ip包?在Imd里面捕获的包除了14个字节的Mac头部以外就是ip包啊,你可以直接用,mac头除了6字节源,6字节目地址外是2字节上层包类型字段,整个mac头没有更多的动作要做,你提取出ip包处理后直接把mac头加回去就可以了。对了,你需要先了解那几个数据结构来找到Mac帧在哪里。


可能是我说得不太清楚吧。
我现在已经能够获得整个数据包的信息(包括你说的以太网头部以及IP部分)。

下面以一个例子来说吧:
拓扑图:
A --> B --> C
其中A、B、C为AD HOC网络中的节点。节点A要发送消息给C,根据从C返回的路由表,节点A要先将消息发送给B,然后由B转发给C。
这样由A发送的消息,其在TCP(或者UDP层),其目的节点里填写的是C的IP。但到了IP层(即在IP包头部)其目的地址填写的是节点B的IP,此时MAC头部的目的地址也要修改成节点B的MAC。也就是说节点B起到了一个路由器的作用。
当节点B收到节点A的信息之后,查看IP头部后面携带的路由表发现数据包是要转发给节点C的,于是它就修改目的IP和目的MAC,然后将整个数据包转发给节点C。
这样就完成了从节点A发送数据包到节点C的全部过程。

从上面的例子我们可以看到:
如果我们截获的只是IP包,即对于底下的MAC层是透明的,那么当我们转发包的时候,由系统自动查找目的IP所对应的MAC,然后进行转发。
而如果像IMD那样不但截获IP包,还截获了MAC信息,在发送的时候需要自己构造一个MAC包头(在单跳情况下可以直接使用原始包的MAC信息,但多跳情况下就得动手修改MAC了)。

因此,我想了解的是有没有只获得IP包的方法。
如果没有,那么在IMD中修改MAC,是否可行?

多谢您的答复!!!
darkme
驱动牛犊
驱动牛犊
  • 注册日期2004-07-17
  • 最后登录2006-03-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-08-27 14:32
这里写错了:
这样由A发送的消息,其在TCP(或者UDP层),其目的节点里填写的是C的IP。

应该是“在TCP或者UDP层,其目的端口填写的是C的端口。”

实际上中间节点的包并不会处理TCP或者UDP的数据。
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-08-27 15:45
我还是不太明白,你的b节点就是一个路由器,按你的描述,如果是源选径路由,a->c的包为mac(b)ip(b),发给b后,b根据源选径路有扩展头知道需要转发给c,那么在ip层就会arp得到c的mac,然后在imd截获这个包之前就变成mac(c)ip(c)。如果不是源选径路由,a->c的包第一跳是b,则mac(b)ip(c),在b收到后看到目的ip是c,也会通过arp得到c的mac地址,然后包变成mac(c)ip(c),也就是说,在imd层得到的包是经过ip层充分处理的包,不需要你自己进行arp处理,至于专门的需要你可以在imd将mac替换成任意你希望的值从而实现任意路由。这里不存在是否需要只获得ip包的问题啊
根据地的兄弟们,团结就是力量
darkme
驱动牛犊
驱动牛犊
  • 注册日期2004-07-17
  • 最后登录2006-03-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-08-27 16:13
我还是不太明白,你的b节点就是一个路由器,按你的描述,如果是源选径路由,a->c的包为mac(b)ip(b),发给b后,b根据源选径路有扩展头知道需要转发给c,那么在ip层就会arp得到c的mac,然后在imd截获这个包之前就变成mac(c)ip(c)。如果不是源选径路由,a->c的包第一跳是b,则mac(b)ip(c),在b收到后看到目的ip是c,也会通过arp得到c的mac地址,然后包变成mac(c)ip(c),也就是说,在imd层得到的包是经过ip层充分处理的包,不需要你自己进行arp处理,至于专门的需要你可以在imd将mac替换成任意你希望的值从而实现任意路由。这里不存在是否需要只获得ip包的问题啊


哦?是这样吗?
如果是的话就太好了。^_^

需要说明的是,在AD HOC网络中并没有专门的路由器概念。每个节点既作为终端节点又作为路由器。路由的实现是通过我们将网卡设置成混杂模式,然后拦截所有的包,从中获得所需的信息然后修改数据包而完成的。

“a->c的包第一跳是b,则mac(b)ip(c),在b收到后看到目的ip是c,也会通过arp得到c的mac地址,然后包变成mac(c)ip(c)。”
这个我拿程序做一下测试。不过不晓得时间能不能安排过来。快忙死了~~~~sigh~~~~~~~~

对了,wxl,可以通过MSN交流吗?我想向你多多请教:)

darkme
驱动牛犊
驱动牛犊
  • 注册日期2004-07-17
  • 最后登录2006-03-15
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-08-27 16:23
我的一点看法,可能会有错误:
IMD工作在MAC之上,在IP层之下。
我们可以修改IP包,但这里我们无法替IP层完成查找与IP对应的MAC的工作。
我们修改了IP包头中的目的地址,IP层并不知道!!
修改后的数据包将被MPSend或者MPSendPacket发送出去。
而在此之前,为了保证目的IP与MAC的对应,我们必须自己修改MAC地址。

不知道这么理解是否有错。请多多执教。
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-08-27 16:57
你是说你要自己换一个ip,然后再将这个IP的mac也换掉?这样做也是可以的,总之你得到了MAC帧,所有的控制权都在你,你可以对包进行任意修改,在这层你甚至可以实现重路由功能,甚至可以把包发给任意不是网卡的设备,

我不怎么用msn,上班了,不方便用,我们可以用mail讨论:)
wxl_50685330@163.com
根据地的兄弟们,团结就是力量
游客

返回顶部