首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Windivert筛选器错误: IfIdx

Windivert筛选器错误: IfIdx
EN

Stack Overflow用户
提问于 2017-03-17 18:35:19
回答 1查看 406关注 0票数 0

我正在尝试使用以下过滤器来转移包,但失败了:

代码语言:javascript
运行
复制
WinDivertOpen("IfIdx == X", WINDIVERT_LAYER::WINDIVERT_LAYER_NETWORK, 0, 0);

我正在尝试一个程序,它必须从索引为X (0,1,2,...)的特定接口转移流量。但是我得到了一个错误代码号87,这表明一个无效的包过滤器字符串、层、优先级或标志。

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

下面是文档:https://reqrypt.org/windivert-doc.html#filter_language

致以问候和感谢。

编辑:我也尝试过这个:

代码语言:javascript
运行
复制
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的特定接口的流量。

EN

回答 1

Stack Overflow用户

发布于 2017-03-25 20:35:57

我认为问题在于,当正确的标记是ifIdx (小写i)时,您使用的是IfIdx。顺便说一句,如果你升级到WinDivert1.2,你可以使用WinDivertHelperCheckFilter函数来获得更有用的错误信息。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42855206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档