如何使用WinPcap发送/注入数据包

时间:2018-03-11 01:22:40

标签: c++ c windows networking pcap

我正在使用Windows 10 64-bit并使用MinGW-w64进行编译,同时使用WinPcap

尝试发送/注入这样的数据包:

#include <stdio.h>
#include <pcap.h>

int main(int argc, char **argv)
{
    char errbuf[PCAP_ERRBUF_SIZE];

    pcap_t *cap = pcap_open(argv[1], 65535, 0, 1000, 0, errbuf);
    printf("interface capture: %s\n", cap == 0 ? "failed" : "success");

    unsigned char packet[100];

    // Dst MAC
    packet[0] = 0x74;
    packet[1] = 0xc6;
    packet[2] = 0x3b;
    packet[3] = 0x00;
    packet[0] = 0x06;
    packet[5] = 0xb5;

    // Src MAC
    packet[6] = 0x74;
    packet[7] = 0xc6;
    packet[8] = 0x3b;
    packet[9] = 0x00;
    packet[10] = 0x06;
    packet[11] = 0xb5;

    // others
    for (unsigned char i = 12; i < 100; i++)
    {
        packet[i] = i;
    }

    printf("inject packet: %s\n", pcap_sendpacket(cap, packet, 100) == 0 ? "success" : "failed");
    return 0;
}

一切看起来都很好并且在发送/注入程序上取得了成功。

然而,我无法捕获任何数据包,使用Wireshark检查,仍然没有运气。

我正在以CMD的管理员身份运行程序,也尝试发送原始UDP数据包。

我是否遗漏了某些内容,或者这是将数据包发送/注入网络接口的正确方法?

1 个答案:

答案 0 :(得分:2)

我解决了我的问题!这是因为Windows上的EOF

请在此处阅读$ ./bin/array_map_values initial string mappings: A : 4 A# : 4 B : 1 Bb : 7 C : 1 C# : 11 D : 8 D# : 3 E : 4 F : 2 F# : 6 G : 8 G# : 10 enter key ('quit' to exit): A key: 'A' - value: 4 enter key ('quit' to exit): A# key: 'A#' - value: 4 enter key ('quit' to exit): D key: 'D' - value: 8 enter key ('quit' to exit): D# key: 'D#' - value: 3 enter key ('quit' to exit): G# key: 'G#' - value: 10 enter key ('quit' to exit): g@ error: key not found. enter key ('quit' to exit): B key: 'B' - value: 1 enter key ('quit' to exit): quit wiki页面:CaptureSetup/Loopback

已安装Npcap,其loopback数据包捕获和注入支持。

对于我的情况,只需从Wireshark网络接口(由loopback驱动程序提供)捕获数据包,然后再将数据包注入此loopback网络接口。现在我能够在Npcap中捕获数据包,UDP接收器套接字成功读取我注入的数据包。