0

たとえば、宛先アドレスなどのパケットのプロパティを変更するために使用される 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;
        }
    }

//Modify パケットで。ステップ ペイロードの変更を実行する必要があります。具体的には、データを新しい文字列に置き換えるか、完全に上書きしようとしています。

WinDivert のドキュメントで、パケット データを処理する唯一の方法は、パケットを解析する次の方法でした。

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: パケットのデータ/ペイロードへの出力ポインター。

ただし、これでデータを変更できるかどうかはわかりません (おそらく変更できますか?)。これは、出力用のパケット データのみを取得できるように思われるためです。

では、ペイロードを編集するにはどうすればよいでしょうか。

4

2 に答える 2

1

https://github.com/basil00/Divert/issues/16 ビデオとソース ユーザーの風向き。

于 2017-06-27T19:51:11.647 に答える