我试图让 libpcap 读取 pcap 文件,让用户选择一个数据包并使用 libnet 在 c 中写入该数据包。
我完成了从文件部分的读取。Libpcap 将该数据包放入一个 const unsigned char 中。我以前使用过 libnet,但从未使用过 libnet 的高级功能。我会使用 libnet 的构建函数创建数据包,然后让它们继续运行。我意识到有一个函数,libnet_adv_write_link()
它接受 libnet 上下文、指向要注入的数据包的指针(const uint8_t)和数据包的大小。我尝试传递从 libpcap 获得的“数据包”,它编译并执行没有错误。但是,我在wireshark中没有看到任何东西。
这是否是解决这个问题的正确方法,或者我应该从 libpcap 读取并根据 libpcap 读取的内容用 libnet 构建一个单独的数据包?
编辑:我相信我在一定程度上解决了这个问题。我用 libpcap 读取了数据包。将第 16 个字节之后的所有字节放入另一个 uchar 并将其写入线路。使用 libnet_adv_write_raw_ipv4(),用 LIBNET_RAW4_ADV 初始化 libnet。我相信,也许是因为驱动的原因,我对 ETH 层没有太多的权力。所以基本上我只是让它自动这样写,而新的 uchar 数据包就是原始数据包中 ETH 层之后剩下的任何东西。到目前为止工作正常。