我正在使用pcap库,但我不知道为什么我总是得到这个输出:
大小的新数据包:udata = 8 hdr = 8 pkt = 8
这是代码:
void handle_pcap(u_char *udata, const struct pcap_pkthdr *hdr, const u_char *pkt)
{
DEBUG("DANY new packet with size: udata= %d hdr=%d pkt=%d", (int) sizeof(udata),(int) sizeof(hdr),(int) sizeof(pkt) );
...
stuff
}
在我使用的另一个文件中:
status = pcap_loop (pcap_obj,
-1 /* How many packets it should sniff for before returning (a negative value
means it should sniff until an error occurs (loop forever) ) */,
handle_pcap /* Callback that will be called*/,
NULL /* Arguments to send to the callback (NULL is nothing) */);
输出是否正常?
我认为不是因为有时候我的程序有时不起作用。
答案 0 :(得分:6)
您正在打印指针的大小,而不是查看pcap_pkthdr * hdr以查看数据包的大小。
您可以通过查看 hdr-> caplen 和 hdr-> len 来查找捕获数据的大小和整个数据包的大小。
答案 1 :(得分:2)
庵。你得到(各种)指针的大小。
e.g。 sizeof(udata)
的大小为u_char *
。这就是为什么这些数字看起来很可疑。
如果您想要数据包的大小,它们位于hdr->caplen
和hdr->len
(前者是捕获的长度,后者是数据包长度)。