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
我只是试图在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;
}
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- 为什么使用 "this" 指针调用派生成员函数?
- 函数调用中参数的顺序重要吗
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 在c++类上调用void函数
- 为什么 std::unique 不调用 std::sort?
- 调用专用模板时出错"no matching function for call to [...]"
- 选择要调用的构造函数
- C++为什么尽管我调用了void函数,它却不起作用
- 构造函数正在调用一个使用当前类类型的函数
- 变量没有改变?通过向量的函数调用
- 没有为自己的结构调用列表推回方法
- 调用'begin(int [n])'没有匹配函数
- 什么时候调用析构函数
- 如何用参数值调用函数(仅在运行时已知)
- std::cout.imbue()多重调用
- 函数何时会在c++中包含stack_Unwind_Resume调用