2017-03-17 87 views
0

我嘗試使用下面的過濾器轉移包,但它失敗:Windivert過濾錯誤:IfIdx

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

我認爲這個問題的交通當正確的標記爲ifIdx(小寫字母i)時,您正在使用IfIdx。順便說一句,如果你升級到WinDivert1.2,你可以使用WinDivertHelperCheckFilter函數來獲得更有用的錯誤信息。

至於你的編輯;可能是一些問題,例如在WinDivertSend之前沒有重新計算校驗和(如有必要)。請參閱passthru.c示例程序。