$ sudo apt-get install git gcc make libpcap-dev
$ git clone https://github.com/robertdavidgraham/masscan
$ cd masscan
$ make
1. 或者直接去网站下载放置系统中。
2. 如果出现以下问题,安装clang
ubuntu@VM-ubuntu:~/masscan$ make
clang -g -ggdb -Wall -O3 -c src/crypto-base64.c -o tmp/crypto-base64.o
make: clang: Command not found
Makefile:87: recipe for target 'tmp/crypto-base64.o' failed
make: *** [tmp/crypto-base64.o] Error 127
3. 安装clang
sudu apt-get install clang
IP地址范围,有三种有效格式:
1、单独的IPv4地址
2、类似"10.0.0.1-10.0.0.233"的范围地址
3、CIDR地址 类似于"0.0.0.0/0",多个目标可以用都好隔开
-p 指定端口进行扫描
--banners 获取banner信息,支持少量的协议
--rate 指定发包的速率
-c,--conf 读取配置文件进行扫描
--echo 将当前的配置重定向到一个配置文件中
-e,--adapter 指定用来发包的网卡接口名称
--adapter-ip 指定发包的IP地址
--adapter-port 指定发包的源端口
--adapter-mac 指定发包的源MAC地址
--router-mac 指定网关的MAC地址
--exclude IP地址范围黑名单,防止masscan扫描
--excludefile 指定IP地址范围黑名单文件
--includefile,-iL 读取一个范围列表进行扫描
--ping 扫描应该包含ICMP回应请求
--append-output 以附加的形式输出到文件
--iflist 列出可用的网络接口,然后退出
--retries 发送重试的次数,以1秒为间隔
--nmap 打印与nmap兼容的相关信息
--http-user-agent 设置user-agent字段的值
--show [open,close] 告诉要显示的端口状态,默认是显示开放端口
--noshow [open,close] 禁用端口状态显示
--pcap 将接收到的数据包以libpcap格式存储
--regress 运行回归测试,测试扫描器是否正常运行
--ttl 指定传出数据包的TTL值,默认为255
--wait 指定发送完包之后的等待时间,默认为10秒
--offline 没有实际的发包,主要用来测试开销
-sL 不执行扫描,主要是生成一个随机地址列表
--readscan 读取从-oB生成的二进制文件,可以转化为XML或者JSON格式
--connection-timeout 抓取banners时指定保持TCP连接的最大秒数,默认是30秒
扫描指定IP文件中的地址
./masscan -iL ip.txt -oX result.txt -p1-65535 --banners --rate=10000
其中,ip.txt的格式如下所示,一个一行。
1.1.0.0/16
192.168.1.1/24
2、设置黑名单来让扫描器扫描时忽略一些网段。语法如下:
masscan 1.1.1.1/8 -p0-65535 --excludefile exclude.txt
3、扫描器速度设置
当前的扫描器使用的是默认的速率100包/秒,如果是扫描全网的话,需要提高速度。
masscan 0.0.0.0/0 -p0-65535 --max-rate 100000
这条命令将以每秒10万包的速率进行扫描
masscan的发包速度非常快,在windows中,它的发包速度可以达到每秒30万包;在Linux中,速度可以达到每秒160万。masscan在扫描时会随机选择目标IP,所以不会对远程的主机造成压力。
默认情况下,masscan的发包速度为每秒100包,为了提高速度,可以设置为 –rate 100000
当然,这些都是建立在较高的机器性能和较高的带宽的前提下的,如果你是家庭的ADSL,那么就不要用那么高的发包速度了,不然准确性会非常差,所以个人建议先对自己的扫描环境进行一个简单测试。
masscan 192.168.0.0/16 -p80,8080 >> a.txt
import re
with open('b.txt', 'a+') as k:
with open('a.txt', 'rt') as f:
for line in f:
ip = re.search(r'\d+\.\d+\.\d+\.\d+',line).group(0)
port = re.search(r'\d{1,5}',line).group(0)
print (ip,":",port)
web_path = "{0}:{1}".format(ip, port)
k.write(web_path)
k.write("\n")
f.close()
k.close()