ZMap在Ubuntu 32bit下的编译

上一篇提到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) -Werror
EXTRACFLAGS=-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 type
zmap.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啦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值