您好,我正在使用 C++ 和 libpcap 进行嗅探,我想在按下 ctrl+c 时停止捕获,这是我的代码:
void Capture::terminate_process(int s){
pcap_breakloop(descr);
pcap_close(descr);
}
void Capture::capturar(){
signal(SIGINT, terminate_process);
pcap_loop (descr, -1, mycallback, NULL);
}
在 .h 中我声明:
pcap_t *descr;
我见过针对我的问题的类似解决方案:How to use pcap_breakloop? 但是我无法编译,我得到这个错误:
capture.cpp:138:35:错误:“void (Capture::) (int)”类型的参数与“{aka __sighandler_t void (*) (int)}”不匹配
最佳答案
signal
需要一个函数指针,您正在使用一个成员函数指针。只需将 Capture::terminate_process(int)
声明为静态即可:
class Capture {
public:
/* ... */
static void Capture::terminate_process(int s);
/* ... */
};
void Capture::terminate_process(int s){
pcap_breakloop(descr);
pcap_close(descr);
}
/* ... */
signal(SIGINT, &Capture::terminate_process);
您将不得不对您的代码进行一些更改,以便您不依赖于实例变量。
关于c++ - 使用 libpcap 中断捕获的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9960813/