2009-10-09 3 views
1

Я хочу захватить пакеты, выходящие из моей машины, и я использую libpcap (версия 1.0.0-1) для этого же. Проблема в том, что базовая программа вроде этого -libpcap: нет обнаруженных беспроводных устройств

#include <stdio.h> 
#include <pcap.h> 

int main(int argc, char *argv[]) { 
    char *dev, errbuf[PCAP_ERRBUF_SIZE]; 
    dev = pcap_lookupdev(errbuf); 
    if (dev == NULL) { 
     fprintf(stderr, "%s\n", errbuf); 
     return (2); 
    } 
    printf("Device : %s\n", dev); 
    return (0); 
} 

, похоже, не отображает беспроводной интерфейс. Каждый раз, когда я компилирую и запускаю программу, она обнаруживает eth0. Как я могу заставить его захватить беспроводные интерфейсы?

ответ

5

pcap_lookupdev() возвращает стандартное сетевое устройство в системе, которое обычно является первым зарегистрированным устройством. pcap_findalldevs() возвращает перечисление всех устройств в системе, которые вы можете использовать для выбора устройства и захвата с него.

3

попробуйте использовать pcap_findalldevs(). Я думаю, что pcap_lookupdev() соответствует первой записи в списке подходящих интерфейсов.

+0

Да. И не нужно угадывать, это находится на странице man: «pcap_lookupdev() возвращает указатель на сетевое устройство, подходящее для использования с pcap_open_live() и pcap_lookupnet()" – bortzmeyer

1

Как указано другими, pcap_lookupdev() просто возвращает первое найденное устройство. Вам нужно использовать pcap_findalldevs() для создания списка всех доступных устройств, а затем попросить пользователя выбрать один (или дать пользователю указать номер n в командной строке, а затем использовать устройство _n_th).

Но если это всего лишь программа с быстрой и грязной проверкой, вы можете узнать имя интерфейса и ввести код прямо в вашу программу. Вы можете использовать ifconfig или tcpdump -D, чтобы узнать имена интерфейсов в вашей системе, а затем позвонить как pcap_create("en1", errbuf).

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