2017-06-27 9 views
0

WinDivertの例とサンプルコードは、宛先アドレスのようなパケットのプロパティを変更するために使用されています。WinDivert - パケットデータ/ペイロードの内容を変更する

しかし、私は本当に厳しい検索を試みてきましたが、を再投入する前に、のパケットの実際のペイロードを変更するドキュメントやサンプルを見つけることができません。 //変更パケットで

HANDLE handle;   // WinDivert handle 
    WINDIVERT_ADDRESS addr; // Packet address 
    char packet[MAXBUF]; // Packet buffer 
    UINT packetLen; 

    handle = WinDivertOpen("...", 0, 0, 0); // Open some filter 
    if (handle == INVALID_HANDLE_VALUE) 
    { 
     // Handle error 
     exit(1); 
    } 

    // Main capture-modify-inject loop: 
    while (TRUE) 
    { 
     if (!WinDivertRecv(handle, packet, sizeof(packet), &addr, &packetLen)) 
     { 
      // Handle recv error 
      continue; 
     } 

     // Modify packet. 

     if (!WinDivertSend(handle, packet, packetLen, &addr, NULL)) 
     { 
      // Handle send error 
      continue; 
     } 
    } 

:ここ

は、私がこれまで持っているコードです。ステップ1ペイロードの変更を実行する必要があります。具体的には、データを新しい文字列で置き換えるか、完全に上書きするかのどちらかを検討しています。

BOOL WinDivertHelperParsePacket(
    __in PVOID pPacket, 
    __in UINT packetLen, 
    __out_opt PWINDIVERT_IPHDR *ppIpHdr, 
    __out_opt PWINDIVERT_IPV6HDR *ppIpv6Hdr, 
    __out_opt PWINDIVERT_ICMPHDR *ppIcmpHdr, 
    __out_opt PWINDIVERT_ICMPV6HDR *ppIcmpv6Hdr, 
    __out_opt PWINDIVERT_TCPHDR *ppTcpHdr, 
    __out_opt PWINDIVERT_UDPHDR *ppUdpHdr, 
    __out_opt PVOID *ppData, 
    __out_opt UINT *pDataLen 
); 

ppData:パケットのデータ/ペイロードへの出力ポインタWinDivertのドキュメントで

は、パケットデータを扱っ私は見つけることができる唯一のことは、パケットを解析するには、この方法でした。

しかし、私はこれがデータを修正することができるのかどうか分からないのですが(おそらくそれはありますか?)、それは出力のためにパケットデータを取り出せるように思えるからです。

ペイロードを編集するにはどうすればいいですか?

答えて

0

これを行うには非常に簡単な方法を探している人がいれば、私が使った "pydivert"というWinDivert用のPythonラッパーがあります。それはとても簡単です。

リンク:https://github.com/ffalcinelli/pydivert