2008-10-17 11 views
0

Je suis en train de compiler un programme appelé ngrep, et quand je courais configure, les choses semblaient aller bien, mais quand je lance make, je reçois:"erreur: 'struct udphdr' n'a pas de membre nommé 'source'" ... hein?

ngrep.c: In function ‘process’: 
ngrep.c:544: error: ‘struct udphdr’ has no member named ‘source’ 
ngrep.c:545: error: ‘struct udphdr’ has no member named ‘dest’ 
make: *** [ngrep.o] Error 1        

Qu'est-ce que cela veut dire, et comment répare le? Il n'y a aucun avertissement ou erreur qui suggère la racine du problème.

Répondre

2

Trouvé le problème:

#ifdef HAVE_DUMB_UDPHDR 
       printf("%s:%d -", inet_ntoa(ip_packet->ip_src), ntohs(udp->source)); 
       printf("> %s:%d", inet_ntoa(ip_packet->ip_dst), ntohs(udp->dest)); 
#else 
       printf("%s:%d -", inet_ntoa(ip_packet->ip_src), ntohs(udp->uh_sport)); 
       printf("> %s:%d", inet_ntoa(ip_packet->ip_dst), ntohs(udp->uh_dport)); 
#endif 

Apparemment, configure a un bug dans ce test, et il pense que mon système a le udphdr "muet", même si ce n'est pas le cas. Changer la première ligne à "#if 0" résout le problème.

+0

dans macOS 'ntohs (tcpHeader-> source)' devrait être changé en 'ntohs (tcpHeader-> th_sport)' et 'ntohs (tcpHeader-> dest)' devrait être changé en 'ntohs (tcpHeader-> th_dport)'. –

1

Eh bien, il y a une structure appelée udphdr (probablement un raccourci pour l'en-tête udp). Et une partie du programme suppose que la structure a les membres source et dest qu'elle n'a pas.

Examinez le fichier ngrep.c lignes 544 et 545 pour trouver les lignes incriminées.

Causes possibles:

  • erreur de type type de nom.
  • La structure n'est pas complètement définie.
  • en utilisant le mauvais struct.

Edit: problème probablement lié: http://ubuntuforums.org/showthread.php?t=371871

+0

Merci pour le lien, mais j'ai déjà build-essential installé, et le site auquel le lien de liens n'existe plus. – raldi

Questions connexes