如何在协议驱动程序中禁用接收环回数据包?
情况是,我的协议驱动程序正在从一个适配器接收数据包并将其发送到另一个适配器。 (如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,Dev:Win7,测试VM:Win2008 R2
答案 0 :(得分:0)
如果您正在设置NDIS_PACKET_TYPE_NO_LOCAL
并发送没有NDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK
标志的NBL,则NDIS将不会向您发送回送数据包。
Wireshark没有向您显示您的协议收到的内容。每个协议都可以接收一组自定义流量。所以Wireshark只向您展示Wireshark收到的内容:)