2010-12-23 3 views
1

Я пытаюсь настроить свое устройство на режим мониторинга, и я знаю, что он способен находиться в режиме монитора, когда работает «монитор режима iwconfig wlan0», я запускаю свой код, и я могу захватывать пакеты из любого места.pcap_set_rfmon не работает?

Проблема заключается в том, что в 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 кстати.

ответ

11

Вы не должны использовать pcap_open_liveиpcap_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.

+0

Сэр, я хотел бы у меня было больше на голоса дают. Благодарю. – csexton

0

в дополнение к ответу Гая Харриса. с помощью pcap_open_live, чтобы открыть устройство, оно будет активировано. вы получите PCAP_ERROR_ACTIVATED -4,, когда вы продолжаете звонить pcap_set_rfmon.

/* the operation can't be performed on already activated captures */  
#define  PCAP_ERROR_ACTIVATED -4 

поэтому используйте pcap_create открыть ручку, и установите rfmon и вызовите pcap_activate, чтобы активировать его.

+0

Это потому, что в ответ на этот вопрос я добавил проверку в 'pcap_open_live()', чтобы сбой в этом случае; когда исходный плакат задал вопрос, эта проверка не была сделана. –

0

предостережение: pcap_set_rfmon() возвращает 0 в случае успеха ...
так что этот код является правильным:

pcap_t *handler = pcap_create("wlan0",errbuff); 
    **if(pcap_set_rfmon(handler,1))** 
    { 
     std::cout << "monitor mode enabled" << std::endl; 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^