【问题标题】:Winpcap: pcap_breakloop function to pause/stop sniffing won't workWinpcap:暂停/停止嗅探的 pcap_breakloop 函数不起作用
【发布时间】:2018-03-09 18:33:01
【问题描述】:

因此,对于我在大学的最后一年项目/论文,我正在使用 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);
        }
    }

当按下退出键时,什么也没有发生,嗅探会继续,直到程序关闭。任何关于为什么这不起作用的帮助将不胜感激!

【问题讨论】:

    标签: c++ keyboard keyboard-events pcap libpcap


    【解决方案1】:

    来自pcap_loop上的文档:

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

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

    【讨论】:

    • 我需要将第二个参数更改为多少才能使 pcap_breakloop 起作用?
    • 我尝试了以下值:1、2、-1 和 -2,当按下转义键时仍然没有任何反应
    • 你也需要你的continue,否则你只会在失败的情况下到达下一个指令。
    • 值 1 或 2 现在会导致控制台在按下转义键时关闭,因此 breakloop 正在工作,我只需要现在停止嗅探并使控制台保持打开状态。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2012-08-24
    • 1970-01-01
    • 1970-01-01
    • 2017-03-20
    • 2017-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多