0

プロトコル ドライバーでループバック パケットの受信を無効にするにはどうすればよいですか? シナリオは、プロトコル ドライバーが 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;
    }

また、パケットを道路に送信すると、SendFlagsMSDN に従ってループバックを回避するために がゼロに設定されます。

NdisSendNetBufferLists(        
                pOpenContext->BindingHandle,
                pNetBufferList,
                NDIS_DEFAULT_PORT_NUMBER,
                0);

これらすべてのハードルを上げた後でも、wireshark から明らかなように、私の抗議はループバック パケットを受信して​​います。

何か案が?

NDIS6.0、ndisprot60、開発者: Win7、テスト VM: Win2008 R2 を使用

4

1 に答える 1

0

フラグを指定せずに NBL を設定NDIS_PACKET_TYPE_NO_LOCALして送信するとNDIS_SEND_FLAGS_CHECK_FOR_LOOPBACK、NDIS はループバック パケットを配信しません。

Wireshark は、プロトコルが受信するものを表示していませ。各プロトコルは、トラフィックのカスタム セットを受信できます。したがって、Wireshark は、Wireshark が受け取るものだけを表示しています :)

于 2013-05-02T19:26:30.780 に答える