C: не могу найти устройство на моем ноутбуке с помощью libpcap pcap_findalldevs () - PullRequest
0 голосов
/ 23 апреля 2020

Я пытался выполнить захват некоторых пакетов с помощью libpcap и использовал pcap_findalldevs для поиска устройств, доступных для захвата.

int main(int argc, char* argv[]) {
    char errbuf[PCAP_ERRBUF_SIZE];
    pcap_if_t* dev_list, *dev;
    int rt = pcap_findalldevs(&dev_list, errbuf);

    dev = dev_list;
    while (dev != NULL) {
        printf("device: %s, description: %s\n", dev->name, dev->description);
        dev = dev->next;
    }
    pcap_t* pcap = pcap_create(NULL, errbuf);
    if (!pcap) {
        fprintf(stderr, "pcap_create() failed: %s\n", errbuf);
        exit(1);
    }

    int msg = pcap_activate(pcap);
    if ( msg > 0) {
        fprintf(stderr, "pcap_activate() generates warning: %s\n", pcap_geterr(pcap));
    } else if (msg < 0) {
        fprintf(stderr, "pcap_activate() failed: %s\n", pcap_geterr(pcap));
        pcap_close(pcap);
        exit(1);
    }
    ...
}

Ни одно устройство не распечатано, и при запуске этого кода произошел сбой pcap_activate(). Но это не имеет смысла, если на моей машине нет устройства для захвата.

Я просмотрел предыдущий вопрос, опубликованный об этой же проблеме: ( libpcap - pcap_findalldevs возвращает NULL на MacOSx )

В этом случае проблема заключалась в привилегии кода. Поэтому я попытался sudo мой код, но он не работает.

Примечание: я запускал этот код в подсистеме ubuntu Linux Windows 10.

Моя распечатка cmd:

$ ./client
pcap_activate() failed: socket: Invalid argument
$ sudo ./client
[sudo] password for User:
pcap_activate() failed: socket: Invalid argument
...