如果不复制此处的所有来源,我正在点击pcap_callback
中的pcap_dispatch
函数。 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
值始终返回零。如果需要更多信息,请告诉我。
这是在运行带有2.6.32内核的libpcap.so.0.9.8的SUSE Linux 11SP1服务器上找到的。使用libpcap.so.0.9.3从SUSE Linux 10SP3升级后才会出现此问题。
编辑: 这似乎只是libpcap.so.0.9.8的一个问题。我重新命名/ usr / lib /中的链接以使用libpcap.so.0.9.3并且问题消失了。
答案 0 :(得分:0)
pcap_dispatch()
的回调函数的三个参数依次为:
pcap_dispatch()
; struct pcap_pkthdr
; 因此,myCallback
不是有效的回调函数,并且不能传递给pcap_dispatch(),因为它期望第一个参数是指向struct pcap_pkthdr
的指针。除非你有另一个真正的回调函数,然后使用适当的参数调用myCallback
,否则有问题的代码将无法工作,并且至少应该从C或C ++编译器得到警告。