gpt4 book ai didi

c - 是否可以使用 libnet 编写一个由 libpcap 读取的数据包?在 c?

转载 作者:太空宇宙 更新时间:2023-11-04 01:29:28 26 4
gpt4 key购买 nike

我试图让 libpcap 读取一个 pcap 文件,让用户选择一个数据包并使用 libnet 在 c 中写入该数据包。

我完成了文件读取部分。 Libpcap 将该数据包放入一个 const unsigned char 中。我以前使用过 libnet,但从未使用过 libnet 的高级功能。我只会使用 libnet 的构建函数创建数据包,然后让它们继续运行。我意识到有一个函数 libnet_adv_write_link() 获取 libnet 上下文、指向要注入(inject)的数据包的指针 (const uint8_t) 和数据包的大小。我尝试传递从 libpcap 获得的“数据包”,它编译和执行时没有错误。但是,我在 wireshark 中没有看到任何内容。

这是解决这个问题的正确方法吗,还是我应该从 libpcap 读取并根据 libpcap 读取的内容使用 libnet 构建一个单独的数据包?

编辑:我相信我在一定程度上解决了这个问题。我用 libpcap 读取数据包。将第 16 个字节之后的所有字节放入另一个 uchar 并将其写入线路。使用 libnet_adv_write_raw_ipv4(),使用 LIBNET_RAW4_ADV 初始化 libnet。我相信,也许是因为驱动程序的原因,我对 ETH 层没有太多的权力。所以基本上我只是让它以这种方式自动写入,新的 uchar 数据包就是原始数据包中 ETH 层之后剩下的任何东西。到目前为止工作正常。

最佳答案

我是当前的 libnet 维护者。

您应该调用 libnet_write_link() 来写入数据包。如果您没有看到它,可能是您没有打开正确的设备,您缺少权限(我希望您检查了 libnet_write_link 的返回值),也可能是注入(inject)的数据包无效。

如果您不需要构建数据包,听起来您应该使用 pcap 来发送数据包,但请参阅 http://www.tcpdump.org/manpages/pcap_inject.3pcap.html

此外,您的声明“Libpcap 将该数据包放入一个 const unsigned char 中”很奇怪。数据包不适合单个字符,pcap 所做的是根据 API 将指针返回到数据包数据中。值得包括一段代码,显示如何从数据中获取数据包,以及如何将其传递给 libnet。您可能没有正确使用指针。

关于c - 是否可以使用 libnet 编写一个由 libpcap 读取的数据包?在 c?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25364677/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com