Pcap Type incomplet

J’essaie de trouver l’adresse MAC à l’aide de pcap pour un petit projet. Pour le moment, la structure avec laquelle je travaille ressemble à ceci:

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

L’appel dans le code se dessine simplement comme:

  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); } 

L’erreur que je reçois est

 error: dereferencing pointer to incomplete type 

Pour autant que je sache, le paquet var est correctement initialisé car il est utilisé sans problème dans d’autres sections du code. Dans le cas de la structure ip, cela fonctionne également correctement, sans erreur. Je sais ce qui est chargé dans cette adresse particulière, je ne peux tout simplement pas savoir ce qui se passe. Quelqu’un a des idées.

erreur: déréférencement du pointeur sur le type incomplet

Vous avez manqué l’inclusion du fichier d’en-tête qui définit la struct ethernet_header dans le fichier c qui contient la fonction void get_packet() .

L’erreur est due au fait que le compilateur ne peut pas voir la définition de la structure. Il est probable que vous ne faites que la déclarer. Cependant, puisque vous déréférenciez le pointeur sur la structure, le compilateur doit connaître la structure de la structure et par conséquent voir la définition de la structure.

Vous devez donc inclure le fichier d’en-tête qui contient la définition de la structure dans ce fichier c particulier.

Ces 2 lignes sont vulnérables à ce type d’erreur. Le compilateur ne peut pas transtyper les données dans une ou les deux déclarations. typecast avec le type de données correct, cela fonctionnera.

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