hsluoyz
驱动牛犊
驱动牛犊
  • 注册日期2009-01-31
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望111点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2984回复:9

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

楼主#
更多 发布于:2012-12-08 23:51
我是在passthru的基础上改的,想做一个NAT功能,已经实现了接包后转发,但是不知道怎么指定发包网卡。我查到有人说是根据Windows路由表发出,不知道是不是这样,还是全部网卡都会转发?

我想自己指定发包网卡,比如调用ndisSend时用{62E9DB05-88D3-479D-A194-22D6A591DB96}这种形式指定网卡,请问可以做到吗?
hsluoyz
驱动牛犊
驱动牛犊
  • 注册日期2009-01-31
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望111点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2012-12-10 23:33
谢谢,我发现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);
hsluoyz
驱动牛犊
驱动牛犊
  • 注册日期2009-01-31
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望111点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2012-12-11 19:00
回 zhangfresh 的帖子
zhangfresh:1、那个是微软创建的虚拟网卡,不鸟他
2、 PADAPT                   pAdaptList;就是保存绑定网卡的链表指针,遍历它就知道绑定哪些网卡
3、代码中,句柄都是pAdapt->BindingHand .. (2012-12-11 10:05)

你好,谢谢你呀
确实是这样的,pAdapt是有多个的,BindingHandle也有多个,我打印了一下,发现了这样的问题:

我在Win7里(共五块网卡:物理网卡、VMNet1、VMNet2、VMNet8、MS Loopback)测试发现,在PtBindAdapter里只能绑定到物理网卡、MS Loopback、ndiswanip、ndiswanipv6 、ndiswanbh,却绑不到VMNet的网卡。

另外我再2003 sp2虚拟机里(物理网卡1、物理网卡2、MS Loopback)也试了一下,发现只能绑定到两块物理网卡和ndiswanip,MS Loopback都绑定不到,请问这又是怎么回事呢?
hsluoyz
驱动牛犊
驱动牛犊
  • 注册日期2009-01-31
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望111点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2012-12-14 23:12
回 zhangfresh 的帖子
zhangfresh:中间层驱动的主inf里面,
有个HKR, Ndi\Interfaces, FilterMediaTypes, “xxxxx”的配置
就是代表要绑定哪几类网卡驱动

另外代码中,好像也有根据mediatype判断是否要绑定的。
....... (2012-12-12 09:54)

dbgview发现PtBindAdapter对于MS Loopback来说根本就不调用,应该就是netsf.inf的问题,但是我不知道怎么修改这个文件。。还希望你能指教一下~

应该就是这几行吧?
HKR, Ndi,            FilterClass,         , failover
HKR, Ndi,            FilterDeviceInfId,   , ms_passthrump
HKR, Ndi,            Service,             , Passthru
HKR, Ndi\Interfaces, UpperRange,          , noupper
HKR, Ndi\Interfaces, LowerRange,          , nolower
HKR, Ndi\Interfaces, FilterMediaTypes,    , "ethernet, tokenring, fddi, wan"
游客

返回顶部