如何在协议驱动程序中禁用接收环回数据包?场景是,我的协议驱动程序从一个适配器接收数据包,然后将其发送到另一个适配器。(如eth0 -> eth1
)。
只对IPv4感兴趣,
#define NPROT_ETH_TYPE 0x0008 //IPv4
该滤波器被定义为,
#define NPROTO_PACKET_FILTER ( NDIS_PACKET_TYPE_NO_LOCAL| \
NDIS_PACKET_TYPE_DIRECTED/*| \
NDIS_PACKET_TYPE_MULTICAST| \
NDIS_PACKET_TYPE_BROADCAST*/)
接收侧正在检查如下所示的环回分组,
// 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进行环回。
NdisSendNetBufferLists(
pOpenContext->BindingHandle,
pNetBufferList,
NDIS_DEFAULT_PORT_NUMBER,
0);
即使在提升了所有这些障碍之后,我的prottest仍在接收环回数据包,这从wireshark中可见一斑。
有什么想法吗?
使用NDIS6.0、ndisprot60、开发人员: Win7、测试虚拟机: Win2008 R2
发布于 2013-05-03 03:26:31
如果您正在设置NDIS_PACKET_TYPE_NO_LOCAL
并发送不带NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK
标志的NBL,那么NDIS将不会向您发送回送数据包。
Wireshark并没有向你展示你的协议接收到了什么。每个协议都可以接收一组自定义流量。因此,Wireshark只向您展示Wireshark接收到的内容:)
https://stackoverflow.com/questions/16330432
复制相似问题