【问题标题】:Can multiple threads sniff on same interface at same time?多个线程可以同时在同一个接口上嗅探吗?
【发布时间】:2020-09-03 02:24:17
【问题描述】:

嗨,我正在编写一个程序来嗅探数据包,使用 tcpdump 的 pcap。

对于来自用户的每个调用,都会创建一个线程。该线程将嗅探接口(可能是环回)并将捕获的数据包写入文件。 (pcap 倾销)

有没有可能,另一个线程同时嗅探同一个接口?

【问题讨论】:

    标签: c++ pcap tcpdump libpcap winpcap


    【解决方案1】:

    我有两个不同的程序在同一个界面上进行嗅探。一个打开界面并处理数据,另一个打开相同的界面进行日志记录。我已经检查过,我没有看到任何一个丢包。 它们不在两个不同线程上的同一个程序中,它们是两个独立的程序。我可以假设,如果您在不同的线程上创建两个 pcap_t 句柄来嗅探同一个接口,您将不会遇到问题。

    【讨论】:

      【解决方案2】:

      没有。对于访问单个 pcap_t *,Libpcap 不是线程安全的。较新的版本线程安全的,因为在一个 pcap_t * 上工作的调用可以在与在一个 不同 pcap_t * 上工作的调用不同的线程中执行(在较早的版本,pcap_compile() 不是线程安全的根本,即使在两个不同的pcap_t * 上运行时也是如此),但是拥有两个独立的是安全的在相同 pcap_t * 上工作的线程。

      【讨论】:

      • 好的。我正在使用winapi createthread,到目前为止它有效。在第二个线程中只使用了 pcap_breakloop。
      • 好的,抱歉,pcap_breakloop() 可以安全地用于线程中特定pcap_t * 的例程,而不是pcap_t * 所在的线程主要被使用。
      猜你喜欢
      • 2019-01-20
      • 1970-01-01
      • 2016-11-01
      • 2017-10-25
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 2018-05-13
      • 1970-01-01
      相关资源
      最近更新 更多