我在Linux上使用libpcap(centos),我正在关注this guide我想简单地打印出ascii中的整个数据包,并且我设法通过将其转换为u_char *在“my_callback”函数中。但我无法弄清楚如何获得数据的长度。 strstr不起作用。标头有一个len成员,您可以访问以获取大小,但我找不到任何类似的*数据包传递。任何帮助表示赞赏。
答案 0 :(得分:3)
在你的回调中,pkthdr变量的caplen成员(参见struct pcap_pkthdr)包含捕获的数据包的大小。
例如,假设捕获了一个数据包。帧的总长度为1024字节。但是,捕获驱动程序仅捕获帧的前128个字节,并使其可用于回调。
在这种情况下,您应该期望pkthdr-> caplen为128而header-> len为1024.
答案 1 :(得分:1)
总数据包大小位于ip标题(http://en.wikipedia.org/wiki/IPv4_header#Total_Length)的“总长度”字段中。
如何使用libpcap获取该值可以在此示例中找到:http://www.tcpdump.org/sniffex.c
您只需从此变量中获取引用“总长度”(名为ip_len)的字段的值:
const struct sniff_ip *ip; /* The IP header */