pcap_dump功能在与pcap_loop一起使用时不会被调用,pcap_dispatch始终返回 0

pcap_dump fucntion is not getting called when used with pcap_loop and pcap_dispatch always return 0

本文关键字:pcap 调用 dispatch 返回 功能 dump loop 一起      更新时间:2023-10-16

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

情况 1:pcap_loop- 当我使用 pcap_loop 时,它调用pcap_dump函数并无限次打印此行"在 pcap_dump(("内,最后崩溃。

情况 2:pcap_dispatch - 当我使用此pcap_dispatch时,它总是返回 0 并且从未输入pcap_dump函数。

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

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

 int main()
    {
         pthread_t thread;
         pthread_create(&thread, NULL,(void* (*)(void*))capture, NULL);
    return 0;
    }    
    void classname::capture()
    {
        pcapDeviceHandle = pcap_open_live(dev.c_str(), SNAP_LEN, 0, 1000, errbuf);
           pd = pcap_dump_open(pcapDeviceHandle, "filename.pcap");
        //returnvalue=pcap_dispatch(pcapDeviceHandle, 4, pcap_dump, (unsigned char *) pd);
        returnvalue=pcap_loop(pcapDeviceHandle, 4, pcap_dump, (unsigned char *) pd);
    pcap_dump_close(pd);
    pcap_close(pcapDeviceHandle);
    }
    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;
    }

在第一种情况下,递归调用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;
}