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

标签 c++ pcap libpcap

在不复制此处所有源代码的情况下,我从 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/

相关文章:

c++ - 如何从嵌套的 std::initializer_list 初始化 2D C 样式数组?

c++ - 使用内部链接定义的全局外部常量变量的类

audio - 从.opus转换为.wav

c - pcap (wireshark) 按 WLAN MAC 地址过滤

c - 迷失在 libpcap - 如何使用 setnonblock()/我应该使用 pcap_dispatch() 还是 pcap_next_ex() 进行实时?

c++ - 尝试编译并收到以下错误,未定义对某些类的引用。

c# - 通过 C# 调用 Win32 api 失败!

c - pcap_open_dead 模拟完整的 UDP 数据包捕获

python - 如何在 Mac OS X 上安装 Python libpcap 模块

c - 运行一个简单的 libpcap 示例时出错