Pcap不完整类型

时间:2012-03-16 07:36:09

标签: c linux sockets pcap

我正在尝试使用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结构的情况下,这也可以正常工作,没有错误。我知道什么是加载到那个特定的地址我只是无法弄清楚发生了什么。任何人都有任何想法。

2 个答案:

答案 0 :(得分:2)

  

错误:取消引用指向不完整类型的指针

您错过了包含在c文件中定义struct ethernet_header的头文件,该文件具有函数void get_packet()

错误是因为编译器无法看到结构的定义,很可能你只是向前声明它。但是,由于您取消引用结构的指针,编译器必须知道结构的布局,因此必须看到结构的定义。

所以只需包含它您需要包含头文件,其中包含此特定c文件中结构的定义。

答案 1 :(得分:0)

这两行容易受到此类错误的影响。编译器无法在任何或两个语句中对数据进行类型转换。使用正确的数据类型进行类型转换,它将起作用。

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