pcap_dump 函数在与 pcap_loop 和 pcap_dispatch 一起使用时不会被调用,总是 return 0
pcap_dump fucntion is not getting called when used with pcap_loop and pcap_dispatch always return 0
我只是想在 dev.str() 接口上捕获数据包并将其存储在一个文件中,以后可以用于分析。
案例 1:pcap_loop- 当我使用 pcap_loop 时,它调用了 pcap_dump 函数并无限次地打印了这一行 "inside 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;
}
我只是想在 dev.str() 接口上捕获数据包并将其存储在一个文件中,以后可以用于分析。
案例 1:pcap_loop- 当我使用 pcap_loop 时,它调用了 pcap_dump 函数并无限次地打印了这一行 "inside 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;
}