【发布时间】:2014-08-18 13:34:58
【问题描述】:
我正在尝试让 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 层之后剩下的任何东西。到目前为止工作正常。
【问题讨论】:
-
只要确保 libnet_adv_write_link() 的返回值正常(不是 -1)?
-
@Arnon Zilca - 它返回它写入的字节数。我认为那很正常。不过什么都没写。
标签: c libpcap packet-capture libnet packet-injection