2017-03-17 6 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を使用していることです。 Btw、WinDivert1.2にアップグレードする場合は、WinDivertHelperCheckFilter関数を使用してより便利なエラーメッセージを表示することができます。

あなたの編集については、 WinDivertSendの前にチェックサムを再計算しない(必要であれば)などの多くの問題があります。 passthru.cサンプルプログラムを参照してください。