首页
社区
课程
招聘
[求助]请问多网卡的情况下调用NdisSend发包时,怎么指定从哪块网卡发出?
2012-12-9 02:09 8067

[求助]请问多网卡的情况下调用NdisSend发包时,怎么指定从哪块网卡发出?

2012-12-9 02:09
8067
我是在passthru的基础上改的,想在Windows做一个类似NAT的功能,目前已经实现了收包后转发,但是不知道怎么指定发包网卡。Windows现有机制应该是按照路由表来路由出去的(不知对不对)

passthru中MPSend中关键的调用是
NdisSend(&Status,
                 pAdapt->BindingHandle,
                 MyPacket);
其中的BindingHandle含义我不太明白,因为dbgview发现BindingHandle并不是一个网卡对应一个BindingHandle的

总之,我想自己指定发包网卡,比如调用NdisSend时用{62E9DB05-88D3-479D-A194-22D6A591DB96}这种形式指定网卡,请问可以做到吗?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工 作,每周日13:00-18:00直播授课

收藏
点赞0
打赏
分享
最新回复 (7)
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zhingma 2012-12-9 08:55
2
0
A发给B网卡,网卡类型一定是相配,不然你发送的数据,可能丢包或者收不到数据包。
雪    币: 52
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
hsluoyz 2012-12-9 10:37
3
0
嗯,我的主要目的是将物理网卡收到的包,从某一个MS Loopback Adapter发出去,再将MS Loopback Adapter与GNS3(一个网络仿真软件)中的host绑定,这样就可以用外部的主机替换掉GNS3中的主机。应该都是以太网标准的,我不知道你说的网卡类型是不是这个意思呢?

现在问题是GNS3中有多个host与运行GNS3主机上的多块MS Loopback Adapter对应,我怎么选择从哪个MS Loopback Adapter发出去呢?
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zhingma 2012-12-10 09:07
4
0
我说的是这个意思,网卡类型一定要对应,A网卡跟b网卡一定要同类型,要不然你所发的数据不会收到或者只收到一些。你分发试试,把其他网卡都关闭了,只留一个网卡,然后开两个试一下,在然后全开,不知你能理解否?
雪    币: 65
活跃值: (51)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xxffv 2012-12-10 12:42
5
0
先用网卡的GUID打开网卡得到句柄,再用那个句柄发包即可
雪    币: 52
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
hsluoyz 2012-12-10 23:19
6
0
谢谢两位,我发现PtBindAdapter会被每个物理网卡调用一次,其传入参数DeviceName就是GUID,但是有几点疑问:
1)PtBindAdapter除了绑定每个物理网卡,还会绑定一个叫\Device\ndisipwan的东西,这个是什么?从没有见过
2)我的这份passthru里NdisOpenAdapter是下面这样调用的,貌似是把得到的网卡句柄放到pAdapt->BindingHandle里,这样的话多个网卡的话岂不是只保留了最后绑定的网卡的句柄?我看了一下MPSend、MPSendPackets里的NdisSend参数都是这个BindingHandle,也就是说passthru默认所有的包都从最后绑定的网卡发出去,这样在多网卡的环境下岂不是会出错啊?
NdisOpenAdapter(Status,
                          &Sts,
                          &pAdapt->BindingHandle,
                          &MediumIndex,
                          MediumArray,
                          sizeof(MediumArray)/sizeof(NDIS_MEDIUM),
                          ProtHandle,
                          pAdapt,
                          DeviceName,
                          0,
                          NULL);
雪    币: 52
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
hsluoyz 2012-12-11 10:23
7
0
哦,我错了,pAdapt这个结构本身就在一个链表里,但是还有一个问题:
我在Win7里(共五块网卡:物理网卡、VMNet1、VMNet2、VMNet8、MS Loopback)测试发现,在PtBindAdapter里只能绑定到物理网卡、MS Loopback、ndiswanip、ndiswanipv6 、ndiswanbh,却绑不到VMNet的网卡。另外ndiswanip查了一下貌似是PPPoE广域网用的,具体是干什么用的呢?是说如果电脑直接连广域网拨号上网的话,就用这个网卡?那ndiswanbh呢?

另外我再2003 sp2虚拟机里(物理网卡1、物理网卡2、MS Loopback)也试了一下,发现只能绑定到两块物理网卡和ndiswanip,MS Loopback都绑定不到,请问这又是怎么回事呢?
雪    币: 65
活跃值: (51)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xxffv 2012-12-15 10:40
8
0
很久没玩NDIS了,记得中间层只能绑定物理网卡。
游客
登录 | 注册 方可回帖
返回