【问题标题】:Is it possible to write a packet, read by libpcap, with libnet? in c?是否可以使用 libnet 编写一个由 libpcap 读取的数据包?在 c?
【发布时间】: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


【解决方案1】:

我是当前的 libnet 维护者。

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

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

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

【讨论】:

  • 感谢您的回答。我想我应该说的是 const unsigned char 数组。我可以用循环打印出数据包的字节,并与我在 Wireshark 中看到的内容进行比较。此外,我认为经过一些调整后,我设法以某种方式将该数据包写入线路。但后来我遇到了另一个问题:数据包的某些字节写入方式不同。就像 eth 层中的协议变成了以太网(0x0003),而它应该是 IP(0x0080)。您认为这是由其他干扰数据包的应用程序引起的吗?我正在使用 Ubuntu Linux。再次,非常感谢。
  • 我尝试使用 libnet_adv_write_link()、libnet_write_link()、pcap_inject()、pcap_sendpacket() 发送数据包。 [i.imgur.com/fBreQnX.png] 你认为解决方案是什么?我怎样才能只发送该 char 数组中的内容? (我发送的数据包底部的 00 也在那里,因为我将 100 作为大小传递给这些函数)
【解决方案2】:
  1. 如果您使用libpcap,为什么不使用libpcap 发送数据包?不,它并不为人所知,但它确实有效。见函数pcap_sendpacket

  2. libpcap 返回的数据包只是一个字节数组。任何需要字节数组(包括以太网帧)的东西都应该可以工作。但是请注意,您的操作系统和/或硬件可能会阻止您发送源 MAC 地址不正确或格式错误的数据包。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-15
    相关资源
    最近更新 更多