Winpcap:暂停/停止嗅探pcap_breakloop功能不起作用

Winpcap: pcap_breakloop function to pause/stop sniffing won't work

本文关键字:pcap breakloop 功能 不起作用 嗅探 暂停 Winpcap      更新时间:2023-10-16

因此,对于我在大学的最后一年项目/论文,我正在使用C++和pcap编写数据包嗅探器。目前该程序可以嗅探数据包,但是我正在尝试对其进行编码,以便在按下转义键时,嗅探将停止。这是有问题的一段代码:

while ((result = pcap_loop(adhandle, 0, packet_handler, NULL)) == 0) {
        if (result == 0)
            continue;
        if (GetAsyncKeyState(VK_ESCAPE))
        {
            result = -2;
        }
        if (result == -2)
        {
            pcap_breakloop(adhandle);
        }
    }

按下 esc 键时,没有任何反应,嗅探将继续,直到程序关闭。任何关于为什么这不起作用的帮助将不胜感激!

来自 pcap_loop 的文档:

pcap_loop(( 处理来自实时捕获或"保存文件"的数据包,直到处理 CNT 数据包,从"保存文件"读取时到达"保存文件"的末尾,调用pcap_breakloop((或发生错误。发生实时读取超时时,它不会返回。cnt 的值为 -1 或 0 等效于无穷大,因此将处理数据包,直到出现另一个结束条件。

由于要pcap_loop的第二个参数是 0,因此它将无限期地处理数据包,并且除非发生错误,否则不会到达 while 循环体。