在mac 10.6上编译dsniff时出错

时间:2010-06-23 22:42:41

标签: macos

当macport自动尝试编译时出现此错误

Error: Target org.macports.build returned: shell command " cd "/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_ports_net_dsniff/work/dsniff-2.3" && /usr/bin/make -j2 all " returned error 2
Command output: /usr/bin/gcc-4.2 -O2 -DBIND_8_COMPAT -arch x86_64 -D_BSD_SOURCE -   DHAVE_SOCKADDR_SA_LEN -DLIBNET_BSDISH_OS -DLIBNET_BSD_BYTE_SWAP - DDSNIFF_LIBDIR=\"/opt/local/lib/\" -I. -I/opt/local/include -I/opt/local/include -   I/opt/local/include  -I/opt/local/include  -I./missing -c ./missing/dummy.c
/usr/bin/gcc-4.2 -O2 -DBIND_8_COMPAT -arch x86_64 -D_BSD_SOURCE -DHAVE_SOCKADDR_SA_LEN -DLIBNET_BSDISH_OS -DLIBNET_BSD_BYTE_SWAP -DDSNIFF_LIBDIR=\"/opt/local/lib/\" -I. -I/opt/local/include -I/opt/local/include -I/opt/local/include  -I/opt/local/include  -I./missing -c ./missing/md5.c
/usr/bin/gcc-4.2 -O2 -DBIND_8_COMPAT -arch x86_64 -D_BSD_SOURCE -DHAVE_SOCKADDR_SA_LEN -DLIBNET_BSDISH_OS -DLIBNET_BSD_BYTE_SWAP -DDSNIFF_LIBDIR=\"/opt/local/lib/\" -I. -I/opt/local/include -I/opt/local/include -I/opt/local/include  -I/opt/local/include  -I./missing -c ./arpspoof.c
./arpspoof.c:25: warning: 'struct ether_addr' declared inside parameter list
./arpspoof.c:25: warning: its scope is only this definition or declaration, which is probably not what you want
./arpspoof.c:26: warning: 'struct ether_addr' declared inside parameter list
./arpspoof.c: In function 'arp_send':
./arpspoof.c:49: warning: passing argument 1 of 'libnet_get_hwaddr' from incompatible pointer type
./arpspoof.c:49: error: too many arguments to function 'libnet_get_hwaddr'
./arpspoof.c:60: warning: passing argument 6 of 'libnet_build_ethernet' from incompatible pointer type
./arpspoof.c:60: error: too few arguments to function 'libnet_build_ethernet'
./arpspoof.c:64: error: 'ETH_H' undeclared (first use in this function)
./arpspoof.c:64: error: (Each undeclared identifier is reported only once
./arpspoof.c:64: error: for each function it appears in.)
./arpspoof.c:64: error: too few arguments to function 'libnet_build_arp'
./arpspoof.c:67: warning: passing argument 1 of 'ether_ntoa' from incompatible pointer type
./arpspoof.c:71: warning: passing argument 1 of 'ether_ntoa' from incompatible pointer type
./arpspoof.c:73: warning: format '%s' expects type 'char *', but argument 4 has type 'int'
./arpspoof.c:73: warning: format '%s' expects type 'char *', but argument 5 has type 'int'
./arpspoof.c:77: warning: passing argument 1 of 'ether_ntoa' from incompatible pointer type
./arpspoof.c:78: warning: format '%s' expects type 'char *', but argument 4 has type 'int'
./arpspoof.c:80: warning: passing argument 1 of 'ether_ntoa' from incompatible pointer type
./arpspoof.c: In function 'arp_find':
./arpspoof.c:114: warning: passing argument 2 of 'arp_cache_lookup' from incompatible     pointer type
./arpspoof.c: In function 'main':
./arpspoof.c:181: warning: assignment makes pointer from integer without a cast
make: *** [arpspoof.o] Error 1
make: *** Waiting for unfinished jobs....

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

第一个警告:

./arpspoof.c:25: warning: 'struct ether_addr' declared inside parameter list
./arpspoof.c:25: warning: its scope is only this definition or declaration,
                          which is probably not what you want
./arpspoof.c:26: warning: 'struct ether_addr' declared inside parameter list

这意味着有一条类似于:

的行
extern somefunc(struct ether_addr *arg1, ...);

没有事先声明'struct ether_addr',这意味着编译器必须将其视为具有函数声明范围的新类型。而且,正如编译器所说,这不是你想要的。你可以通过在声明行之前解决这个问题:

struct ether_addr;

这告诉编译器最终会定义类型。在编译器需要结构内部的细节之前,你可以通过指向通常的C放弃。

错误告诉你某些事情严重误入歧途。该代码假定将定义ETH_H但不是。

还有其他声明与代码配置期望的声明不同,这会导致通过文件进一步发出警告。很可能是“没有强制转换的整数指针”是未声明的函数,因此它们被假定为返回整数的函数,但它们实际上是返回“char *”的函数,因此应该声明。

当我尝试编译dsniff时,配置阶段失败,因为它没有找到'libnet'。

所以:

  • 确保您手头有相关的库(如果您有相关'libnet'的URL,这会有帮助),以及相关的标题。
  • 查看配置输出;它可能无法分析需要分析的所有内容。
  • 查看是否可以找到有关为MacOS X或其中一个BSD版本编译dsniff的任何信息(MacOS X / Darwin有点类似于Unix的BSD版本)。