【问题标题】:pcap_dump fucntion is not getting called when used with pcap_loop and pcap_dispatch always return 0与 pcap_loop 一起使用时,不会调用 pcap_dump 函数,并且 pcap_dispatch 始终返回 0
【发布时间】:2018-02-01 17:53:31
【问题描述】:

我只是试图在 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;
    }

【问题讨论】:

    标签: c++ pcap libpcap


    【解决方案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;
    }
    

    【讨论】:

      猜你喜欢
      • 2016-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-03
      • 1970-01-01
      • 2015-11-20
      • 1970-01-01
      • 2011-10-19
      相关资源
      最近更新 更多