我在设备上使用 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()
在它应该能够工作的情况下无法工作。