ZMap在Ubuntu下的编译安装

关于ZMap就不多说了,官网在这里:https://zmap.io/

官方编译安装方法在这里:https://zmap.io/download.html

截至目前ZMap的最新版本是1.0.3

ZMap设计运行于64bit Linux,依赖于GMP, libpcap, Gengetopt

Debian/Ubuntu: 

sudo apt-get install libgmp3-dev libpcap-dev gengetopt

Fedora/Red Hat Enterprise Linux/CentOS: 

sudo yum install gmp gmp-devel libpcap-devel gengetopt

我的机器的环境是:版本Ubuntu 12.04.3 LTS 64bit,内核3.2.0

编译安装过程:

wget https://github.com/zmap/zmap/archive/v1.0.3.tar.gz
#为了方便识别,重命名一下
mv v1.0.3.tar.gz zmap-v1.0.3.tar.gz
tar -zxvf zmap-v1.0.3.tar.gz
cd zmap-1.0.3/
cd src
make
sudo make install

ZMap安装完成,可以运行如下命令测试:

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

很快,程序会输出10个Internet上打开了80端口的主机的IP,你也可以换成22端口23端口试试。具体的用法可以参考ZMap官方文档。

如果不想以root运行ZMap,可以设置:

setcap cap_net_raw=ep /usr/local/sbin/zmap

ZMap的Redis支持默认不打开,如果需要的话必须先安装Hiredis,然后重新编译ZMap。

Redis官网在这里:http://www.redis.io/

Redis目前最新的稳定版是2.6.16

编译安装过程:

wget http://download.redis.io/releases/redis-2.6.16.tar.gz
tar -zxvf redis-2.6.16.tar.gz
cd redis-2.6.16
make
sudo make install

Redis安装完成

Hiredis在这里:https://github.com/redis/hiredis

它是Redis最小的C客户端
使用git下载代码

git clone https://github.com/redis/hiredis.git
cd hiredis/
make
sudo make install

Hiredis安装完成

重新进入ZMap目录

make clean
make REDIS=true

可能会遇到下面的error:

output_modules/module_redis.c: In function ‘redismodule_flush’
error: passing argument 1 of ‘redis_lpush’ discards ‘const’ qualifier from pointer target type [-Werror]
redis.h:26:5: note: expected ‘char *’ but argument is of type ‘const char *’

原因是QUEUE_NAME被定义为宏:

#define QUEUE_NAME "zmap_results"
但是redis_lpush的声明为:
int redis_lpush(char*, void*, int, size_t);

这里是const char *到char *转换的问题

对module_redis.c做如下修改:

//if (redis_lpush(QUEUE_NAME, buffer,
if (redis_lpush((char *)QUEUE_NAME, buffer,

另一个error:

output_modules/module_redis.c:94:2: error: initialization from incompatible pointer type [-Werror]
output_modules/module_redis.c:94:2: error: (near initialization for ‘module_redis.success_ip’) [-Werror]

对module_redis.c做如下修改:

//int redismodule_newip(ipaddr_n_t saddr, UNUSED ipaddr_n_t daddr,
//        UNUSED port_n_t sport, UNUSED port_n_t dport,
//        UNUSED const char *response_type, int is_repeat,
//        UNUSED int in_cooldown, UNUSED const u_char *packet)
int redismodule_newip(ipaddr_n_t saddr, UNUSED ipaddr_n_t daddr,
        UNUSED const char *response_type, int is_repeat,
        UNUSED int in_cooldown, UNUSED const u_char *packet, UNUSED size_t buflen)

又是一个error:

output_modules.o:(.data.rel+0x18): undefined reference to `module_ssldbfeed'	

查找一下发现zmap 1.0.3的代码里压根没有定义module_ssldbfeed,估计这是新特性,有可能在非稳定的新版本中存在,注释掉相关的代码就ok了。

对output_modules.c做如下修改:

//extern output_module_t module_ssldbfeed;
//&module_ssldbfeed,

再次make REDIS=true,编译成功。

再次运行zmap,发现:

zmap: error while loading shared libraries: libhiredis.so.0.10: cannot open shared object file: No such file or directory

原因是libhiredis.so.0.10默认被安装到了/usr/local/lib/里面,创建个软链接放在/usr/lib/就ok了。

sudo ln -s /usr/local/lib/libhiredis.so.0.10 /usr/lib/libhiredis.so.0.10

到这里ZMap的Redis支持就编译完成了。

尽管文档里说ZMap是为64位设计的,但是实际在32位机上也可以编译使用,只是有些代码要做小小的修改,这个接下来有空再写一下。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值