Pcap Неполный тип - PullRequest
       10

Pcap Неполный тип

0 голосов
/ 16 марта 2012

Я пытаюсь найти MAC-адрес, используя pcap для небольшого проекта. На данный момент структура, с которой я работаю, выглядит следующим образом:

    struct ethernet_header
    {
         u_char dhost[6];
         u_char shost[6];
         u_short type;
    };

Вызов в коде просто выглядит как:

    void get_packet(u_char *args, const struct pcap_pkthdr *header, const u_char *packet)
    {
         const struct ethernet_header *ethernet;
         const struct ip_header *ip;
         ethernet = (struct ethernet_header *)(packet);
         ip = (struct ip_header *)(packet + 16);

         printf("Destination MAC: %s\n", ethernet->dhost);
    }

Я получаю ошибку

error: dereferencing pointer to incomplete type

Теперь, насколько мне известно, пакет var правильно инициализируется, потому что он без проблем используется в других разделах кода. В случае структуры ip это также работает без ошибок. Я знаю, что загружается в этот конкретный адрес, я просто не могу понять, что происходит. У любого есть идеи.

Ответы [ 2 ]

2 голосов
/ 16 марта 2012

ошибка: разыменование указателя на неполный тип

Вы пропустили включение файла заголовка, который определяет struct ethernet_header в файл c, который имеет функцию void get_packet().

Ошибка в том, что компилятор не может см. определение структуры, скорее всего, вы просто объявите об этом.Однако, поскольку вы разыменовываете указатель на структуру, компилятор должен знать структуру структуры и, следовательно, должен видеть определение структуры.

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

0 голосов
/ 14 мая 2015

Эти 2 строки уязвимы для ошибок этого типа.Компилятор не может типизировать данные в одном или обоих утверждениях.введите его с правильным типом данных, он будет работать.

ethernet = (struct ethernet_header *)(packet);
ip = (struct ip_header *)(packet + 16);
...