我正在尝试将设备设置为监视模式,并且我知道它能够在监视模式下执行“iwconfig wlan0模式监视器”,并且运行我的代码,并且可以从任何地方捕获数据包。

问题是在libpcap中,它根本无法将我的设备设置为监视模式(无需输入上述命令行)。在手动连接到访问点之前,我无法捕获任何数据包。

       pcap_t *handler = pcap_create("wlan0",errbuff);
       if(pcap_set_rfmon(handler,1)==0 )
       {
           std::cout << "monitor mode enabled" << std::endl;
       }
       handler=pcap_open_live ("wlan0", 2048,0,512,errbuff);
       int status = pcap_activate(handler); //it returns 0 here.

那么这是代码问题还是pcap库问题?有人在不使用命令行的情况下成功将其设备设置为监视模式?我使用的是Realtek2500 btw。

最佳答案

您不应该在同一代码中使用pcap_open_livepcap_create / pcap_activate。尝试做

pcap_t *handler = pcap_create("wlan0",errbuff);
if (handler == NULL)
{
    std::cerr << "pcap_create failed: " << errbuf << std::endl;
    return; // or exit or return an error code or something
}
if(pcap_set_rfmon(handler,1)==0 )
{
    std::cout << "monitor mode enabled" << std::endl;
}
pcap_set_snaplen(handler, 2048);  // Set the snapshot length to 2048
pcap_set_promisc(handler, 0); // Turn promiscuous mode off
pcap_set_timeout(handler, 512); // Set the timeout to 512 milliseconds
int status = pcap_activate(handler);

当然,还要检查status的值。

关于c++ - pcap_set_rfmon不起作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4516436/

10-09 02:27