我在 linux (centos) 上使用 C 中的 libpcap 并且我正在遵循本指南我想简单地打印出 ascii 中的整个数据包,并且我设法通过在“my_callback”中将其转换为 u_char* 来使其工作“ 功能。但我不知道如何获取数据的长度。strstr 没有工作。标头有一个 len 成员,您可以访问该成员以获取大小,但我找不到与传递的 *packet 类似的任何内容。任何帮助表示赞赏。
问问题
3749 次
2 回答
3
在您的回调中,pkthdr 变量的 caplen 成员(请参阅 struct pcap_pkthdr)包含捕获的数据包的大小。
例如假设一个数据包被捕获。帧的总长度为 1024 字节。但是,捕获驱动程序仅捕获帧的前 128 个字节,并使其可用于您的回调。
在这种情况下,您应该期望 pkthdr->caplen 为 128,header->len 为 1024。
于 2010-04-07T17:39:01.450 回答
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 */
于 2013-07-15T11:01:37.960 回答