C++ Windivert筛选器错误:IfIdx

C++ Windivert筛选器错误:IfIdx,c++,windows,networking,filter,interface,C++,Windows,Networking,Filter,Interface,我尝试使用以下筛选器转移包,但失败: WinDivertOpen("IfIdx == X", WINDIVERT_LAYER::WINDIVERT_LAYER_NETWORK, 0, 0); 我正在试用一个程序,该程序必须从索引为X(0,1,2,…)的特定接口转移流量,但我得到一个错误代码87,这表示无效的包过滤器字符串、层、优先级或标志 如果我尝试使用其他过滤器,如“tcp”,它可以工作,但我只需要将过滤器应用于我已经知道其索引的特定接口。如果此筛选键不起作用。。我能做什么解决方案 以下是文

我尝试使用以下筛选器转移包,但失败:

WinDivertOpen("IfIdx == X", WINDIVERT_LAYER::WINDIVERT_LAYER_NETWORK, 0, 0);
我正在试用一个程序,该程序必须从索引为X(0,1,2,…)的特定接口转移流量,但我得到一个错误代码87,这表示无效的包过滤器字符串、层、优先级或标志

如果我尝试使用其他过滤器,如“tcp”,它可以工作,但我只需要将过滤器应用于我已经知道其索引的特定接口。如果此筛选键不起作用。。我能做什么解决方案

以下是文件:

问候并感谢你

编辑:我也试过这个:

handle = WinDivertOpen("true", WINDIVERT_LAYER::WINDIVERT_LAYER_NETWORK, 0, 0);

if (handle == INVALID_HANDLE_VALUE)
    printf("ERROR WINDIVERT: %d", GetLastError());

else
{
    while (TRUE)
    {
        if (WinDivertRecv(handle, packet, sizeof(packet), &addr, &packetLen))
        {
            if (addr.IfIdx != X)
            {
                WinDivertSend(handle, packet, packetLen, &addr, NULL);
            }
        }
    }

    WinDivertClose(handle);

但是它阻止了所有接口的通信量,并且不仅阻止了索引为X的特定接口的通信量。

我认为问题在于,当正确的令牌是
IfIdx
(小写
I
)时,您正在使用
IfIdx
)。顺便说一句,如果升级到WinDivert1.2,您可以使用
WinDiverThelphickekFilter
功能获取更有用的错误消息

至于你的编辑;可能存在许多问题,例如在
WinDivertSend
之前没有重新计算校验和(如有必要)。请参阅
passthru.c
示例程序