gpt4 book ai didi

c++ - struct pcap_pkthdr len 总是 == 零

转载 作者:太空宇宙 更新时间:2023-11-04 14:21:21 29 4
gpt4 key购买 nike

在不复制此处所有源代码的情况下,我从 pcap_dispatch 调用了一个 pcap_callback 函数。 caplen 似乎显示了正确的长度(因为它始终是某物)但 len 始终等于 0。是否不再填充此字段?这可能是我没有捕获的错误情况吗?

这是一个片段...

void myCallback ( const struct pcap_pkthdr *header, const u_char *packet, void* buffer )
{
if ( (uint16_t)(header->len) != (uint16_t)(header->caplen) )
/* Some Error */
streamObj << "Caplen (" << (uint16_t)(header->caplen) << " != "
<< ") Packet Len (" << (uint16_t)(header->len) << ")";
...
}

header->len 值总是返回为零。如果需要更多信息,请告诉我。

这是在运行 libpcap.so.0.9.8 和 2.6.32 内核的 SUSE Linux 11SP1 服务器上发现的。该问题仅在使用 libpcap.so.0.9.3 从 SUSE Linux 10SP3 升级后出现。

编辑: 这似乎只是 libpcap.so.0.9.8 的问题。我重新指向/usr/lib/中的链接以使用 libpcap.so.0.9.3,问题消失了。

最佳答案

pcap_dispatch() 回调函数的三个参数按顺序是:

  1. 传递给 pcap_dispatch() 的“用户数据”指针;
  2. 一个指向 struct pcap_pkthdr 的指针;
  3. 指向原始数据包数据的指针。

因此,myCallback不是有效的回调函数,不能传递给 pcap_dispatch(),因为它期望第一个参数是指向 struct pcap_pkthdr 的指针.除非你有另一个真正的回调函数,然后调用 myCallback使用适当的参数,有问题的代码将无法运行,并且至少应该从 C 或 C++ 编译器获得警告。

关于c++ - struct pcap_pkthdr len 总是 == 零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7478437/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com