ZMap在Ubuntu 32bit下的编译

来源:互联网 发布:登记照排版软件 编辑:程序博客网 时间:2024/05/21 22:51

上一篇提到ZMap是为64位环境设计编写的,但是32位机也能编译使用。

首先下载代码,进入目录,make,遇到三四个error就结束了,error中有一句关键的:

cc1: warnings being treated as errors

这是由于Makefile里面指定让编译器将warning当成error,所以编译中止了。

我们只要将src/Makefile修改一下就好了:

WERROR_CFLAGS = -Werror#EXTRACFLAGS=-g -O2 $(EXTRA_CFLAGS) $(GCCHARDENING) $(GCCWARNINGS) -WerrorEXTRACFLAGS=-g -O2 $(EXTRA_CFLAGS) $(GCCHARDENING) $(GCCWARNINGS)

编译成功,运行上一篇提到的测试命令:

sudo zmap -p 80 -N 10 -B 1M -o -

结果冒出这么一句:

[FATAL] zmap: could not detect GW MAC address for 192.168.1.1 on eth0. Try setting default gateway mac address (-G).

arp后发现没有网关的IP和MAC地址映射,这里可以手工添加网关的IP和mac地址,也可以直接ping一下网关就OK了。

这样zmap就可以使用了,但是会不会出问题就不清楚了,毕竟我们将64位转32位可能出现的warning给屏蔽了。

下面试着去解决这些warning,首先将Makefile恢复成原样。

第一个error是:

lib/blacklist.c../lib/blacklist.c:127: error: left shift count >= width of type../lib/blacklist.c:127: error: division by zero

这是一个移位的问题,可以做如下修改:

int m=32;//log_debug("blacklist", "%llu addresses allowed to be scanned (%0.0f%% of address space)", //  allowed, allowed*100./(1L << 32));log_debug("blacklist", "%llu addresses allowed to be scanned (%0.0f%% of address space)",   allowed, allowed*100./(1L << m));

第二个问题:

zmap.c:112: warning: format ‘%lu’ expects type ‘long unsigned int’, but argument 4 has type ‘uint64_t’

这是一个printf格式化相关的问题,可以这样改(先在86行左右加一个宏定义)

#define SLL(w,x,y) printf("%s\t%s\t%llu\n", w, x, y);//SLU("cnf", "bandwidth", zconf.bandwidth);SLL("cnf", "bandwidth", zconf.bandwidth);

第三个问题:

zmap.c: In function ‘main’:zmap.c:461: error: left shift count >= width of typezmap.c:470: error: left shift count >= width of type

改法和第一个一样:

int m=32;//Line 461 v = v * (1L << m) / 100.;//Line 470 else if (v >= (1L << m)) {

改完了,再重新make,就OK啦。

原创粉丝点击