プロトコル ドライバーでループバック パケットの受信を無効にするにはどうすればよいですか? シナリオは、プロトコル ドライバーが 1 つのアダプターからパケットを受信し、それを別のアダプターに送信するというものです。(のように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);
これらすべてのハードルを上げた後でも、wireshark から明らかなように、私の抗議はループバック パケットを受信しています。
何か案が?
NDIS6.0、ndisprot60、開発者: Win7、テスト VM: Win2008 R2 を使用