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

108
8

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

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

Вызов int кода просто loosk нравится:

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

спросил(а) 2021-01-25T17:13:51+03:00 4 месяца, 4 недели назад
1
Решение
76

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

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

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

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

ответил(а) 2021-01-25T17:13:51+03:00 4 месяца, 4 недели назад
45

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


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

ответил(а) 2021-01-25T17:13:51+03:00 4 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема