与pcap_loop一起使用时,pcap_dump fucntion不会被调用,而pcap_dispatch总是返回0

时间:2018-02-01 17:53:32

标签: c++ pcap libpcap

我只是想在dev.str()接口上捕获数据包并将其存储在一个文件中,以后可以用于分析。

案例1:pcap_loop-当我使用pcap_loop时,它调用了pcap_dump函数并打印了这行“在pcap_dump()内部无限次,最后崩溃了。

案例2:pcap_dispatch - 当我使用这个pcap_dispatch时,它总是返回0并且从不输入pcap_dump函数。

这是什么意思?我没有pcap_setfilter。

请建议我如何解决这个问题。

INSERT INTO recycletag (id,tagid,isassign) 
VALUES (?,?,?) ON DUPLICATE KEY UPDATE isassign = VALUES(isassign)

1 个答案:

答案 0 :(得分:1)

在第一种情况下,递归调用pcap_dump,直到堆栈溢出:

void classname::pcap_dump(u_char *args, const struct pcap_pkthdr *header, const u_char *packet)
{
    cout<<"inside pcapdump()"<<endl;
    pcap_dump(args, header, packet); // <-- here classname::pcap_dump() calls itself
    cout<<"after pcapdump()"<<endl;
}

要将数据包转储到某处,您必须调用正确的pcap_dump函数。为此,请添加正确的范围,例如

void classname::pcap_dump(u_char *args, const struct pcap_pkthdr *header, const u_char *packet)
{
    cout<<"inside pcapdump()"<<endl;
    ::pcap_dump(args, header, packet);
    cout<<"after pcapdump()"<<endl;
}