首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在NDIS协议驱动程序中禁用环回数据包

如何在NDIS协议驱动程序中禁用环回数据包
EN

Stack Overflow用户
提问于 2013-05-02 12:39:20
回答 1查看 968关注 0票数 0

如何在协议驱动程序中禁用接收环回数据包?场景是,我的协议驱动程序从一个适配器接收数据包,然后将其发送到另一个适配器。(如eth0 -> eth1)。

只对IPv4感兴趣,

代码语言:javascript
运行
复制
#define NPROT_ETH_TYPE               0x0008 //IPv4

该滤波器被定义为,

代码语言:javascript
运行
复制
#define NPROTO_PACKET_FILTER  ( NDIS_PACKET_TYPE_NO_LOCAL|    \
                                NDIS_PACKET_TYPE_DIRECTED/*|    \
                                NDIS_PACKET_TYPE_MULTICAST|   \
                                NDIS_PACKET_TYPE_BROADCAST*/)

接收侧正在检查如下所示的环回分组,

代码语言:javascript
运行
复制
    // Leave the packet if loopback flag is set.
    if( NdisTestNblFlag( pNetBufList, NDIS_NBL_FLAGS_IS_LOOPBACK_PACKET ))
    {
        //
        // Ndisprot is not interested in this NetBufferList, return the
        // NetBufferList back to the miniport if the miniport gave us
        // ownership of it.
        //
        break;
    }

当我沿着路向下发送数据包时,SendFlags被设置为零,以避免按照MSDN进行环回。

代码语言:javascript
运行
复制
NdisSendNetBufferLists(        
                pOpenContext->BindingHandle,
                pNetBufferList,
                NDIS_DEFAULT_PORT_NUMBER,
                0);

即使在提升了所有这些障碍之后,我的prottest仍在接收环回数据包,这从wireshark中可见一斑。

有什么想法吗?

使用NDIS6.0、ndisprot60、开发人员: Win7、测试虚拟机: Win2008 R2

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-03 03:26:31

如果您正在设置NDIS_PACKET_TYPE_NO_LOCAL并发送不带NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK标志的NBL,那么NDIS将不会向您发送回送数据包。

Wireshark并没有向你展示你的协议接收到了什么。每个协议都可以接收一组自定义流量。因此,Wireshark只向您展示Wireshark接收到的内容:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16330432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档