libpcap: беспроводные устройства не обнаружены - PullRequest
1 голос
/ 09 октября 2009

Я хочу захватывать пакеты, выходящие из моей машины, и я использую 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. Как сделать так, чтобы он также захватывал беспроводные интерфейсы?

Ответы [ 3 ]

5 голосов
/ 25 ноября 2009

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

3 голосов
/ 09 октября 2009

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

1 голос
/ 07 декабря 2009

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

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

...