【发布时间】:2020-09-03 02:24:17
【问题描述】:
嗨,我正在编写一个程序来嗅探数据包,使用 tcpdump 的 pcap。
对于来自用户的每个调用,都会创建一个线程。该线程将嗅探接口(可能是环回)并将捕获的数据包写入文件。 (pcap 倾销)
有没有可能,另一个线程同时嗅探同一个接口?
【问题讨论】:
标签: c++ pcap tcpdump libpcap winpcap
嗨,我正在编写一个程序来嗅探数据包,使用 tcpdump 的 pcap。
对于来自用户的每个调用,都会创建一个线程。该线程将嗅探接口(可能是环回)并将捕获的数据包写入文件。 (pcap 倾销)
有没有可能,另一个线程同时嗅探同一个接口?
【问题讨论】:
标签: c++ pcap tcpdump libpcap winpcap
我有两个不同的程序在同一个界面上进行嗅探。一个打开界面并处理数据,另一个打开相同的界面进行日志记录。我已经检查过,我没有看到任何一个丢包。
它们不在两个不同线程上的同一个程序中,它们是两个独立的程序。我可以假设,如果您在不同的线程上创建两个 pcap_t 句柄来嗅探同一个接口,您将不会遇到问题。
【讨论】:
没有。对于访问单个 pcap_t *,Libpcap 不是线程安全的。较新的版本是线程安全的,因为在一个 pcap_t * 上工作的调用可以在与在一个 不同 pcap_t * 上工作的调用不同的线程中执行(在较早的版本,pcap_compile() 不是线程安全的根本,即使在两个不同的pcap_t * 上运行时也是如此),但是拥有两个独立的不是安全的在相同 pcap_t * 上工作的线程。
【讨论】:
pcap_breakloop() 是 可以安全地用于线程中特定pcap_t * 的例程,而不是pcap_t * 所在的线程主要被使用。