我正在尝试使用以下过滤器来转移包但它失败了:
WinDivertOpen("IfIdx == X", WINDIVERT_LAYER::WINDIVERT_LAYER_NETWORK, 0, 0);
我正在品尝一个程序,该程序必须从索引为X(0,1,2,...)的特定接口转移流量,但是我得到错误代码号87,这表示无效的数据包过滤字符串,图层,优先权或旗帜。
如果我尝试使用其他过滤器,如“tcp”它可以工作,但我只需要将过滤器应用于我已经知道其索引的特定接口。如果这个过滤器键不起作用..我能做什么解决方案?。
以下是文档:https://reqrypt.org/windivert-doc.html#filter_language
问候并感谢你。
编辑:我也试过了:
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的特定接口的流量。
答案 0 :(得分:0)
我认为问题在于,当正确的令牌为IfIdx
(小写ifIdx
)时,您正在使用i
。顺便说一下,如果你升级到WinDivert1.2,你可以使用WinDivertHelperCheckFilter
函数来获得更有用的错误信息。
至于你的编辑;可能是一些问题,例如在WinDivertSend
之前没有重新计算校验和(如有必要)。请参阅passthru.c
示例程序。