2010-01-09 75 views
1

我跑一个程序(该链接 - http://www.security-freak.net/raw-sockets/sniffer_eth_ip_tcp.c)在我的Fedora Core 5,在编译时,我得到了以下错误:如何解决类似“结构iphdr”错误没有名为成员“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’ 

但是,相应头文件中的struct iphdr包含上述数据成员。 任何人都可以请帮忙..

+1

这些是第一个发生的错误,还是在他们面前有其他错误?你能发布编译器的_entire_输出吗?另外,请查看/usr/include/linux/ip.h中的'struct iphdr'的定义以查看这些成员是否实际定义。 – 2010-01-09 20:23:12

+0

什么是您正在编译的实际文件。编译器输出说文件名是“tcp.c”,而不是“sniffer_eth_ip_tcp.c”。此外,“sniffer_eth_ip_tcp.c”(在该链接中提供)只有268行。 – 2010-01-09 20:27:34

+0

我现在也发布了警告。我应该怎么做纠正..(tcp.c也有相同的代码) – trinity 2010-01-10 08:06:38

回答

3

得到该错误的唯一方法是如果你的程序所指的iphdr不包括那些数据成员。因此,搜索所有你的包含,检查dup的等(也可以通过预编译运行源代码,找出已包含的所有东西,通常会提供你的答案)


run在你的源代码找出哪些头文件包括在内(顺序)。如果您在正确的信息之前包含错误信息的标题,则会出现问题。本质上,只包含编译程序所需的头文件

+0

+1 - 编译器没有说谎。如果它表示找不到成员,则意味着您认为包含的头不是被包含的头或被重新定义的头等。 – wadesworld 2010-01-10 08:07:52

+0

前两行<1错误和1个警告>在头文件linux中/tcp.h和asm/byteorder.h。我们如何纠正它们? – trinity 2010-01-10 08:49:25

相关问题