2010-01-09 3 views
1

J'ai couru un programme (le lien est - http://www.security-freak.net/raw-sockets/sniffer_eth_ip_tcp.c) dans mon fedora core 5. compilation, je reçois les erreurs suivantes:comment résoudre les erreurs comme « struct iphdr » n'a pas de membre nommé « DADDR »

[[email protected] ~]# gcc sniffer_eth_ip_tcp.c 
    In file included from sniffer_eth_ip_tcp.c:12: /usr/include/linux/ip.h:97: error: expected specifier-qualifier-list before ‘uint8_t’ 
    In file included from /usr/include/linux/tcp.h:21, 
       from sniffer_eth_ip_tcp.c:13: 
    /usr/include/asm/byteorder.h:6:2: warning: #warning using private kernel header; include <endian.h> instead! 
    sniffer_eth_ip_tcp.c: In function ‘ParseIpHeader’: 
    sniffer_eth_ip_tcp.c:147: error: ‘struct iphdr’ has no member named ‘daddr’ 
    sniffer_eth_ip_tcp.c:148: error: ‘struct iphdr’ has no member named ‘saddr’ 
    sniffer_eth_ip_tcp.c: In function ‘ParseTcpHeader’: 
    sniffer_eth_ip_tcp.c:185: error: ‘struct iphdr’ has no member named ‘protocol’ 
    sniffer_eth_ip_tcp.c:187: error: ‘struct iphdr’ has no member named ‘ihl’ 

Mais, la structure iphdr dans le fichier d'en-tête correspondant contient les membres de données mentionnés ci-dessus. Quelqu'un peut-il aider s'il vous plaît ..

+1

S'agit-il des premières erreurs qui se produisent, ou y en a-t-il d'autres avant elles? Pouvez-vous poster la sortie _entire_ du compilateur? Regardez également la définition de 'struct iphdr' dans /usr/include/linux/ip.h pour voir si ces membres sont réellement définis. –

+0

Quel est le fichier que vous compilez actuellement? La sortie du compilateur indique que le nom de fichier est "tcp.c" et non "sniffer_eth_ip_tcp.c". De plus, "sniffer_eth_ip_tcp.c" (comme prévu dans ce lien) n'a que 268 lignes. –

+0

J'ai maintenant posté les avertissements aussi. que dois-je faire pour rectifier .. (tcp.c avait également le même code) – trinity

Répondre

3

La seule façon d'obtenir cette erreur est si l'iphdr votre programme fait référence à n'inclut pas ces membres de données. Ainsi, la recherche dans tous vos comprend, vérifiez de dup, etc. (aussi, vous pouvez exécuter la source à travers une précompilation et découvrez tout ce qui a été inclus, qui fournit habituellement votre réponse)

[modifier]
run cpp sur votre source pour savoir quels fichiers d'en-tête sont inclus (dans quel ordre). Si vous avez un en-tête avec les informations erronées incluses avant les informations correctes, vous aurez un problème. Pour l'essentiel, n'incluez que les fichiers d'en-tête nécessaires pour compiler le programme.
[/ edit]

+0

+1 - le compilateur ne ment pas. S'il indique qu'il ne peut pas trouver les membres, cela signifie que l'en-tête que vous pensez être inclus n'est pas inclus ou que quelque chose est redéfini, etc. – wadesworld

+0

Les deux premières lignes <1 erreur et 1 avertissement> sont dans les fichiers d'en-tête linux /tcp.h et asm/byteorder.h. Comment les corrigeons-nous? – trinity

Questions connexes