如何 Send/Inject 使用 WinPcap 打包

How to Send/Inject Packet with WinPcap

我正在研究 Windows 10 64-bit 并使用 MinGW-w64 进行编译,还使用 ​​WinPcap

正在尝试 send/inject 像这样的数据包:

#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;
}

一切看起来都很好,并且在 send/inject 计划上取得了成功。

但是我无法捕获任何数据包,用 Wireshark 进行了检查,仍然没有成功。

我是 运行 作为管理员使用 CMD 的程序,也尝试发送原始 UDP 数据包。

我是不是遗漏了什么或者这是 send/inject 数据包进入网络接口的正确方法?

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

请在此处阅读 Wireshark 维基页面:CaptureSetup/Loopback

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

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