信息收集之主机发现:masscan
https://github.com/robertdavidgraham/masscan
安装masscan
在 Debian/Ubuntu 上编译 masscan:
$ sudo apt-get install git gcc make libpcap-dev
$ git clone https://github.com/robertdavidgraham/masscan
$ cd masscan
$ make
$ cp bin/masscan /bin/
masscan
通过 masscan -h
可以看到 masscan的具体用法,其中 masscan与上文讲到的nmap是部分兼容的,通过masscan --nmap
方式,列举出兼容的参数,可以与nmap无缝衔接。
usage:
masscan -p80,8000-8100 10.0.0.0/8 --rate=10000
scan some web ports on 10.x.x.x at 10kpps
masscan --nmap
list those options that are compatible with nmap
masscan -p80 10.0.0.0/8 --banners -oB <filename>
save results of scan in binary format to <filename>
masscan --open --banners --readscan <filename> -oX <savefile>
read binary scan results in <filename> and save them as xml in <savefile>
masscan相对于nmap没有这么大而全,但是依然是比较流行的端口扫描工具。它比nmap这些扫描器更快,而且masscan更加灵活,它允许自定义任意的地址范围和端口范围。
masscan的发包速度非常快,在windows中,它的发包速度可以达到每秒30万包;在Linux中,速度可以达到每秒160万。masscan在扫描时会随机选择目标IP,所以不会对远程的主机造成压力。默认情况下,masscan的发包速度为每秒100包,为了提高速度,可以设置为 --rate 100000
。
详细参数
与nmap兼容的参数不再赘述,接下来讲解一下masscan独有的使用方法。
- IP地址范围,有三种有效格式,1、单独的IPv4地址 2、类似"10.0.0.1-10.0.0.233"的范围地址 3、CIDR地址 类似于"0.0.0.0/0",多个目标可以用都好隔开
- -p <ports,--ports <ports>> 指定端口进行扫描
- --banners 获取banner信息,支持少量的协议
- --rate <packets-per-second> 指定发包的速率
- -c <filename>, --conf <filename> 读取配置文件进行扫描
- --echo 将当前的配置重定向到一个配置文件中
- -e <ifname> , --adapter <ifname> 指定用来发包的网卡接口名称
- --adapter-ip <ip-address> 指定发包的IP地址
- --adapter-port <port> 指定发包的源端口
- --adapter-mac <mac-address> 指定发包的源MAC地址
- --router-mac <mac address> 指定网关的MAC地址
- --exclude <ip/range> IP地址范围黑名单,防止masscan扫描
- --excludefile <filename> 指定IP地址范围黑名单文件
- --includefile,-iL <filename> 读取一个范围列表进行扫描
- --ping 扫描应该包含ICMP回应请求
- --append-output 以附加的形式输出到文件
- --iflist 列出可用的网络接口,然后退出
- --retries 发送重试的次数,以1秒为间隔
- --nmap 打印与nmap兼容的相关信息
- --http-user-agent <user-agent> 设置user-agent字段的值
- --show [open,close] 告诉要显示的端口状态,默认是显示开放端口
- --noshow [open,close] 禁用端口状态显示
- --pcap <filename> 将接收到的数据包以libpcap格式存储
- --regress 运行回归测试,测试扫描器是否正常运行
- --ttl <num> 指定传出数据包的TTL值,默认为255
- --wait <seconds> 指定发送完包之后的等待时间,默认为10秒
- --offline 没有实际的发包,主要用来测试开销
- -sL 不执行扫描,主要是生成一个随机地址列表
- --readscan <binary-files> 读取从-oB生成的二进制文件,可以转化为XML或者JSON格式.
- --connection-timeout <secs> 抓取banners时指定保持TCP连接的最大秒数,默认是30秒。
示例
1.扫描指定网段范围的指定端口 使用方法类似于nmap,扫描指定网段范围的指定端口
masscan -p80,8080-8100 10.0.0.0/8
这条命令将完成如下工作:
- 扫描10.x.x.x子网,大约有1600万个地址
- 扫描端口80和8000-8100范围的端口段
- 打印结果到标准输出,也可以重定向到一个文件
可以使用 --echo 将当前的配置输出到一个配置文件,利用 -c 来制定配置文件进行扫描:
masscan -p80,8000-8100 10.0.0.0/8 --echo > scan.conf
masscan -c scan.conf --rate 1000
2.获取Banner
masscan不仅仅只是测试端口是否开放,它还能在完成TCP连接的同时获取目标应用程序的Banner信息。
masscan 10.0.0.0/8 -p80 --banners --source-ip x.x.x.x
含义是扫描10.x.x.x网段80端口的开放信息,并且获取banner信息。--source-ip 是指定源IP,这个ip必须指定独立有效的IP地址。
3.全网扫描 (轻易不要玩,容易被请去喝茶)
可以对整个互联网发起扫描,使用的命令如下
masscan 0.0.0.0/0 -p0-65535
我们可以通过设置--excludefile做为黑名单,来让扫描器扫描时忽略一些网段,并将扫描的结果输出到指定文件中。语法如下:
masscan 0.0.0.0/0 -p0-65535 --excludefile exclude.txt -oX scan.xml
扫描器使用的是默认的速率100包/秒,如果是扫描全网的话,需要提高速度。这条命令将以每秒10万包的速率进行扫描:
masscan 0.0.0.0/0 -p0-65535 --rate 100000
如果不想输入命令,可以通过创建配置文件,然后用加载配置文件的方式运行。配置文件的内容如下所示:
rate = 100000
output-format = xml
output-status = all
output-filename = scan.xml
ports = 0-65535
range = 0.0.0.0-255.255.255.255
excludefile = exclude.txt
扫描时,用 -c 加载配置文件 即可完成扫描。
结果输出
默认情况下,masscan会生成相当大的文本文件,但是很容易将它们转换为任何其他格式。支持五种输出格式:
- xml:只需使用参数-oX。或者,使用参数--output-format xml和--output-filename <filename>。
- 二进制:这是masscan内置格式。它产生的文件要小得多,因此,当我扫描Internet时,磁盘不会填满。但是,它们需要解析。命令行选项--readscan将读取二进制扫描文件。--readscan与该-oX选项一起使用将生成结果文件的XML版本。
- grepable:这是Nmap -oG输出的实现,可以通过命令行工具轻松地对其进行解析。只需使用参数-oG。或者,使用参数--output-format grepable和 --output-filename <filename>。
- json:这会将结果保存为JSON格式。只需使用参数-oJ。或者,使用参数--output-format json和 --output-filename <filename>。
- list:这是一个简单的列表,每行一个主机和端口对。只需使用参数-oL。或者,使用参数 --output-format list和--output-filename <filename>。格式为:
<port state> <protocol> <port number> <IP address> <POSIX timestamp>
open tcp 80 XXX.XXX.XXX.XXX 1390380064
- 不正之风!机器学习论文里都有哪四大投机取巧的写作手法?
- 前端写一个月的原生 Android 是怎样一种体验?
- 给人挖矿还不自知 电脑已变黑客肉鸡
- 反序列化漏洞屡被黑客利用,危害巨大,代码怎样写才安全?
- Mifa 主题微信编辑器
- Mifa GitHub Pages 主题
- Mifa Design:一个服务于 Markdown 的设计体系
- 未来机器人大脑将获取互联网知识自我学习
- 【架构拾集】: Android 移动应用架构设计
- Dore 混合应用框架 —— 基于 React Native 的混合应用迁移方案
- Android6.0源码分析之View(二)--measure Android6.0源码分析之View(一)
- 程序员,2017年你的技能树上增加了哪些新技能?
- Android6.0源码分析之View(一)
- 2017 年,我挖的那些开源软件坑
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux中的iostat命令使用教程
- 深入解读Linux进程函数fork(),vfork(),execX()
- Linux centos下设置定时备份任务的方法步骤
- Linux 中如何切换相同程序的不同版本
- Linux中查看指定文件夹内各个子文件夹内的文件数量
- Linux系统中 /etc/fstab 文件的深入解读
- bash命令使用详解
- 实例详解Linux 中的命令链接操作符
- Python 为什么不支持 switch 语句?
- centos安装jdk1.8时出现没有/lib/ld-linux.so.2:这个文件的原因分析
- Linux多线程编程快速入门
- Linux添加swap分区的方法
- linux下vsftpd的安装及配置使用详细步骤(推荐)
- Linux分区格式化的命令
- Linux调试工具GDB使用简易教程