libpcap: беспроводные устройства не обнаружены

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

#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. Как я могу заставить его также захватывать беспроводные интерфейсы?


person Siddhant    schedule 09.10.2009    source источник


Ответы (3)


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

person mrcrassic    schedule 24.11.2009

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

person Gautham Ganapathy    schedule 09.10.2009
comment
да. И не надо гадать, это есть на справочной странице: pcap_lookupdev() возвращает указатель на сетевое устройство, подходящее для использования с pcap_open_live() и pcap_lookupnet() - person bortzmeyer; 13.10.2009

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

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

person benzado    schedule 07.12.2009