我正在尝试使用pcap为一个小项目找到MAC地址。截至目前,我正在使用的结构如下:
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结构的情况下,这也可以正常工作,没有错误。我知道什么是加载到那个特定的地址我只是无法弄清楚发生了什么。任何人都有任何想法。
答案 0 :(得分:2)
错误:取消引用指向不完整类型的指针
您错过了包含在c文件中定义struct ethernet_header
的头文件,该文件具有函数void get_packet()
。
错误是因为编译器无法看到结构的定义,很可能你只是向前声明它。但是,由于您取消引用结构的指针,编译器必须知道结构的布局,因此必须看到结构的定义。
所以只需包含它您需要包含头文件,其中包含此特定c文件中结构的定义。
答案 1 :(得分:0)
这两行容易受到此类错误的影响。编译器无法在任何或两个语句中对数据进行类型转换。使用正确的数据类型进行类型转换,它将起作用。
ethernet = (struct ethernet_header *)(packet);
ip = (struct ip_header *)(packet + 16);