Как искать беспроводное устройство с помощью pcap_lookupdev? - PullRequest
1 голос
/ 28 июля 2011

Вот мой код, пока что.


#include <stdio.h>
#include <stdlib.h>
#include <pcap.h>
#include <errno.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int main(int & argc, char* argv[]){


    char *net; /* dot notation of the network address */
    char *mask;/* dot notation of the network mask    */
    int ret;   /* return code */
    char errbuf[PCAP_ERRBUF_SIZE];
    bpf_u_int32 netp; /* ip          */
    bpf_u_int32 maskp;/* subnet mask */
    struct in_addr addr;

    char *dev; /* name of the device to use */

    printf("Asking pcap to find a valid device for use to sniff on.\n");
    dev = pcap_lookupdev(errbuf);
    if(dev == NULL) {
        printf("pcap_lookupdev ERROR:  %s\n",errbuf);
        exit(1);
    }

    printf("Printing out device name.\n");
    printf("DEV: %s\n",dev);

    printf("Asking pcap for the network address and mask of the device.\n");
    ret = pcap_lookupnet(dev,&netp,&maskp,errbuf);
    if(ret == -1) {
        printf("Unable to retrieve the network address and mask of the device.  Error Description:  %s\n",errbuf);
        exit(1);
    }

    printf("Get the network address in a human readable form,\n");
    addr.s_addr = netp;
    net = inet_ntoa(addr);
    if(net == NULL) {
        printf("Unable to retrieve network address in human readable form.\n");
        perror("inet_ntoa");
        exit(1);
    }

    printf("NET: %s\n",net);

    /* do the same as above for the device's mask */
    addr.s_addr = maskp;
    mask = inet_ntoa(addr);

    if(mask == NULL) {
        printf("Unable to retrieve device mask in human readable form.  ");
        perror("inet_ntoa");
        exit(1);
    }

    printf("MASK: %s\n",mask);
    return 0;
}

/*
Output:

Asking pcap to find a valid device for use to sniff on.
Printing out device name.
DEV: eth0
Asking pcap for the network address and mask of the device.
Unable to retrieve the network address and mask of the device.  Error Description:  eth0: no IPv4 address assigned

*/

Вот мой вопрос: что мне нужно сделать, чтобы pcap_lookupdev просматривал беспроводные устройства (т.е. wlan0)?

Ответы [ 2 ]

2 голосов
/ 10 августа 2011

Документация для pcap_findalldevs указывает на причину, по которой pcap_lookupdev () не находит подходящих сетевых устройств:

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

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

См. Требования к привилегиям root для функций libpcap для получения дополнительной информации.

0 голосов
/ 20 октября 2012

pcap_lookupdev() будет искать одно устройство.Это может быть не то устройство, которое вы хотите;если у вас есть как проводное, так и беспроводное интерфейсное устройство, оно вполне может найти проводное устройство, и это не , потому что оно не смотрит на беспроводные устройства, а потому, что оно оказалось первым найденным устройством.

Нет способа настроить только на беспроводные устройства.

Чтобы получить список всех устройств, которые может обрабатывать libpcap, используйте pcap_findalldevs().

...