1

我在设备上使用 libpcap 在 C 中捕获,该设备不支持通过 pcap 设置为监视模式(pcap_can_set_rfmon 返回-6)。但是我可以在命令行上使用 iw 和 iwconfig 将其设置为监视模式,所以我手动执行此操作然后运行程序。我还在我的 Mac 上进行捕获,我可以使用 pcap 函数 pcap_set_rfmon 将网络设备设置为监控模式。

我想知道 pcap 是否有办法实际检查设备是否已经处于监控模式,只是为了错误处理和方便的原因。我没有找到答案(正面或负面)。所以也许这里有人可以回答这个问题?

4

1 回答 1

0

我在设备上使用 libpcap 在 C 中捕获,该设备不支持通过 pcap 设置为监视模式(pcap_can_set_rfmon 返回-6)。

pcap_can_set_rfmon()返回-6?那是PCAP_ERROR_RFMON_NOTSUP,它pcap_can_set_rfmon()不应该返回;如果出现问题,它应该只返回一个错误值,如果它认为你不能设置监控模式,它应该返回 0,如果它认为你可以,它应该返回 1。你的意思是pcap_set_rfmon()返回-6?并且pcap_can_set_rfmon(),这意味着“pcap_set_rfmon()应该工作”吗?

但是我可以在命令行上使用 iw 和 iwconfig 将其设置为监视模式,所以我手动执行此操作然后运行程序。

您是否以 root 身份运行这些命令中的任何一个,例如使用sudo

我想知道 pcap 是否有办法实际检查设备是否已经处于监控模式,

不。这个想法是结果pcap_can_set_rfmon()应该正确地指示是否pcap_set_rfmon()会成功,并且程序应该请求监视模式,无论它是否已经打开,就像它们对混杂模式所做的那样。

不幸的是,Linux 目前存在一些问题 - 主要是非 mac80211 机制与 libpcap 的组合不如 mac80211 机制(需要更多权限,与 NetworkManager 冲突等)以及 mac80211 机制无法用于libpcap,因为 libpcap 当前需要不断变化的 API libnl 才能使用它们(可能需要直接使用 netlink 套接字来修复)。这会导致pcap_set_rfmon()在它应该能够工作的情况下无法工作。

于 2012-11-06T19:23:10.393 回答