“错误:'struct udphdr'没有名为'source'的成员”......嗯?

时间:2008-10-17 21:45:30

标签: c linux unix ngrep

我正在尝试编译一个名为ngrep的程序,当我运行configure时,事情似乎进展顺利,但是当我运行make时,我得到:

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                              

这是什么意思,我该如何解决?没有早先的警告或错误表明问题的根源。

2 个答案:

答案 0 :(得分:2)

发现问题:

#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

显然,configure在这个测试中有一个错误,它认为我的系统有“哑”udphdr,即使它没有。将第一行更改为“#if 0”可以解决问题。

答案 1 :(得分:1)

好吧,有一个名为udphdr的结构(可能是udp标头的简称)。程序的某些部分假定结构具有成员源和目标,而它没有。

查看文件ngrep.c第544行和第545行以查找有问题的行。

可能的原因:

  • 类型名称类型错误。
  • struct未完全定义。
  • 使用错误的结构。

编辑:可能是相关问题:http://ubuntuforums.org/showthread.php?t=371871