2

Fedora コア 5 でプログラムを実行しました (リンクはhttp://www.security-freak.net/raw-sockets/sniffer_eth_ip_tcp.c )。コンパイル時に、次のエラーが発生します。

[root@localhost ~]# 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 には、上記のデータ メンバーが含まれています。誰でも助けてください..

4

1 に答える 1

3

このエラーが発生する唯一の方法は、プログラムが参照している iphdr にそれらのデータ メンバーが含まれていない場合です。したがって、すべてのインクルードを検索し、dup などをチェックします (また、プリコンパイルを介してソースを実行し、インクルードされているすべてのものを見つけて、通常は答えを提供します)。

[編集]
ソースで cpp を実行して、どのヘッダー ファイルが (どの順序で) インクルードされているかを調べます。正しい情報の前に誤った情報が含まれているヘッダーがあると、問題が発生します。基本的に、プログラムのコンパイルに必要なヘッダー ファイルのみをインクルードします
[/edit]

于 2010-01-09T20:21:43.830 に答える