我试图让libpcap读取一个pcap文件,让用户选择一个数据包,然后使用c语言中的libnet编写该数据包。
我完成了文件部分的阅读。Libpcap将该数据包放入const unsigned char中。我以前使用过libnet,但从未使用过libnet的高级函数。我只需要使用libnet的构建函数创建包,然后让它们继续工作。我意识到有一个函数,libnet_adv_write_link()
接受libnet上下文,一个指向要注入的包(const uint8)的指针和包的大小。我试着传递从libpcap获得的“包”,它编译并执行时没有错误。不过,我在wireshark里什么也没看到。
这是解决这个问题的正确方法吗,还是应该从libpcap中读取,并根据libpcap读取的内容使用libnet构建一个单独的包?
编辑:我相信我解决了这个问题。我用libpcap读了这个包。将第16个字节之后的所有字节放入另一个uchar中,并将其写入导线中。使用libnet_adv_write_raw_ipv4(),libnet初始化为libnet_RAW4_adv。我相信,也许是由于驱动程序的原因,我在ETH层上没有太大的权限。所以基本上我只是让它以这种方式自动写入,新的uchar包就是原始包中ETH层之后剩下的东西。到目前为止效果还不错。
最佳答案
我现在是libnet的维护者。
您应该调用libnet_write_link()来编写数据包。如果您没有看到它,则可能是您没有打开正确的设备,您缺少权限(您检查了libnet_write_link的返回值,希望如此),也可能是注入的数据包无效。
如果您不需要构建数据包,听起来您应该使用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/