Masscan:最快的互联网IP端口扫描器

Masscan:最快的互联网IP端口扫描器

Masscan号称是最快的互联网端口扫描器,最快可以在六分钟内扫遍互联网。

masscan的扫描结果类似于nmap(一个很著名的端口扫描器),在内部,它更像scanrand, unicornscan, and ZMap,采用了异步传输的方式。它和这些扫描器最主要的区别是,它比这些扫描器更快。而且,masscan更加灵活,它允许自定义任意的地址范和端口范围。

安装配置

在Debian/Ubuntu系统中,安装方法如下:

$ sudo apt-get install git gcc make libpcap-dev$ git clone https://github.com/robertdavidgraham/masscan$ cd masscan$ make

注:安装完成后的可执行程序在masscan/bin中

您也可以使用多线程加快编译速度 make -j

PF_RING

如果您想获得超过两百万每秒的速度,您需要一个英特尔10-Gbps网卡和一个被称为PF_RING DNA(http://www.ntop.org/products/pf_ring/)的特殊驱动程序。masscan使用PF_RING不要进行重建,你只需要建立以下组件即可:

libpfring.so (安装于 /usr/lib/libpfring.so)pf_ring.ko (pf_ring自己的内核驱动)ixgbe.ko (英特尔10-gbps网卡驱动)你不要建立自己的libpcap.so

当masscan检测到网卡为dna0时,将自动切换为PF_RING模式

自我测试

当安装完成是可以测试一下是否安装成功:

$ make regressbin/masscan --regressselftest: success!

使用方法

使用方法类似于nmap,扫描指定网段范围的指定端口

# masscan -p80,8080-8100 10.0.0.0/8

这条命令将完成如下工作:

  1. 1、扫描10.x.x.x子网,大约有1600万个地址
  2. 2、扫描端口80和8000-8100范围的端口段
  3. 3、打印结果到标准输出,也可以重定向到一个文件

也可以 –echo 将当前的配置输出到一个配置文件,利用 -c 来制定配置文件进行扫描

# masscan -p80,8000-8100 10.0.0.0/8 --echo > xxx.conf# masscan -c xxx.conf --rate 1000

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地址。

您可以通过配置防火墙来防止masscan的返回不了信息的情况

Linux可以在这样配置

# iptables -A INPUT -p tcp --dport 60000 -j DROP# masscan 10.0.0.0/8 -p80 --banners --source-port 60000

MAC OS X和BSD可以这样配置

# sudo ipfw add 1 deny tcp from any to any 60000 in# masscan 10.0.0.0/8 -p80 --banners --source-port 60000

您也可以检查其他类型的信息,例如心脏出血漏洞 –heartbleed,方法和获取banner是一样的

扫描全网

您可以对整个互联网发起扫描,使用的命令如下

# masscan 0.0.0.0/0 -p0-65535

有时候对这个互联网扫描可能会对你造成一些麻烦,你可能会被请去喝茶。所以,我们可以通过设置黑名单来让扫描器扫描时忽略一些网段。语法如下:

# masscan 0.0.0.0/0 -p0-65535 --excludefile exclude.txt

你也可以把扫描的结果不输出到命令行,输出到指定文件中

# masscan 0.0.0.0/0 -p0-65535 -oX scan.xml

这条命令把扫描的结果保存在一个XML文件中

当前的扫描器使用的是默认的速率100包/秒,如果是扫描全网的话,需要提高速度。

# masscan 0.0.0.0/0 -p0-65535 --max-rate 100000

这条命令将以每秒10万包的速率进行扫描

上述的这些命令可能输入起来有点麻烦,我们可以通过创建配置文件,然后用加载配置文件的方式运行。配置文件的内容如下所示:

rate = 100000output-format = xxxoutput-status = alloutput-filename = xxx.xxxports = 0-65535range = 0.0.0.0-255.255.255.255excludefile = exclude.txt

扫描时,用 -c 加载配置文件,这样的话,你进行重复扫描会省很多的力气。

结果输出

主要有5种输出的格式

  1. XML 默认格式 使用-oX <filename> 或者使用 –output-format xml 和 –output-filename <filename>进行指定
  2. binary masscan内置格式
  3. grepable nmap格式 使用 -oG <filename> 或者 –output-format grepable 和 –output-filename <filename>进行指定
  4. json 使用 -oJ <filename> 或者 –output-format json 和 –output-filename <filename>进行指定
  5. list 简单的列表,每行一个主机端口对。使用-oL <filename> 或者 –output-format list 和 –output-filename <filename>进行指定

传输速度

masscan的发包速度非常快,在windows中,它的发包速度可以达到每秒30万包;在Linux中,速度可以达到每秒160万。masscan在扫描时会随机选择目标IP,所以不会对远程的主机造成压力。

默认情况下,masscan的发包速度为每秒100包,为了提高速度,可以设置为 –rate 100000

详细参数

<ip/range> 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

原文地址:http://blog.51cto.com/xiaogongju/2090933

时间: 2024-10-09 23:10:32

Masscan:最快的互联网IP端口扫描器的相关文章

mac/unix系统:C++实现一个端口扫描器

在比较早以前,我用过S扫描器, 以及大名鼎鼎的nmap扫描器, 可以快速扫描某个主机开放的端口, 今天使用C实现这样一个软件, 编译环境为Mac, 系统版本10.11.6: #include <stdio.h> #include <stdlib.h> #include <sys/socket.h> #include <unistd.h> #include <time.h> #include <sys/types.h> #include

利用 fsockopen() 函数开放端口扫描器

利用 fsockopen() 函数开放端口扫描器 1.前言 本文利用 fsockopen() 函数,编写一个功能简单的端口扫描器. 2.关键技术 本实例的端口号是固定的,通过对数组的遍历,利用 fsockopen() 函数连接,如果连接成功,则该端口处于开放状态,否则该端口处于关闭状态. 核心代码如下: foreach ($port as $key => $value) { echo '<tr>'; echo '<td>' . $key . '</td>'; ec

TCP/IP 端口号大全

TCP/IP 端口号大全 1 tcpmux TCP 端口服务多路复用 5 rje 远程作业入口 7 echo Echo 服务 9 discard 用于连接测试的空服务 11 systat 用于列举连接了的端口的系统状态 13 daytime 给请求主机发送日期和时间 17 qotd 给连接了的主机发送每日格言 18 msp 消息发送协议 19 chargen 字符生成服务:发送无止境的字符流 20 ftp-data FTP 数据端口 21 ftp 文件传输协议(FTP)端口:有时被文件服务协议(

写个端口扫描器及各种尝试

端口扫描器原理很简单,无非就是操作socket,能connect就认定这个端口开放着. import socket def scan(port): s = socket.socket() if s.connect_ex(('localhost', port)) == 0: print port, 'open' s.close() if __name__ == '__main__': map(scan,range(1,65536)) 这样一个最简单的端口扫描器出来了. 等等喂,半天都没反应,那是因

【技术分享】手把手教你使用PowerShell内置的端口扫描器

[技术分享]手把手教你使用PowerShell内置的端口扫描器 引言 想做端口扫描,NMAP是理想的选择,但是有时候NMAP并不可用.有的时候仅仅是想看一下某个端口是否开放.在这些情况下,PowerShell确实能够大放异彩.接下来我们聊聊如何使用PowerShell实现基本的端口扫描功能. 本文中用到的PowerShell命令 PowerShell端口扫描器:针对单个IP的多个端口的扫描 1..1024 | % {echo ((new-object Net.Sockets.TcpClient)

用threading和Queue模块实现多线程的端口扫描器

一.Queue模块基础 q = Queue.Queue()    q.qsize()           返回队列的大小  q.empty()         如果队列为空,返回True,反之False  q.full()        如果队列满了,返回True,反之False q.full            与 maxsize 大小对应  q.get([block[, timeout]]) 获取队列,timeout等待时间  q.get_nowait()         相当q.get(

python端口扫描器

吃了个火鸡面后感觉到了怀疑人生!!!!!!!!!妈耶,在也不吃了.思路都给辣没了!!! python端口扫描器代码如下: #-*-coding:utf-8 from socket import * import threading import argpars lock=threading.lock() openNUm=0 threads=[] def portScanner(host,port): global openNum try: s=socket(AF_INET,SOCK_STREAM

达内培训:php在线端口扫描器

达内培训:php在线端口扫描器 [来源] 达内    [编辑] 达内   [时间]2012-12-21 这个扫描器很简单.就是用了一个数组来定义端口的相关信息,原理就是用fsockopen函数连接,如果可以连接,就表示端口打开,否则就是关闭 PHP是一种功能强大的Web开发语言.开发效率高,语法简单,为动态网站量身定做,加强面向对象(向C++靠拢,与JAVA搭了点边),可惜单线程(这是至命弱点,据说PHP是用CC++编写的.),也能用C.C++.JAVA开发中间层,调用COM,服务器维护难度小,

Socket网络编程(TCP/IP/端口/类)和实例

Socket网络编程(TCP/IP/端口/类)和实例 原文:C# Socket网络编程精华篇 转自:微冷的雨 我们在讲解Socket编程前,先看几个和Socket编程紧密相关的概念: TCP/IP层次模型 当然这里我们只讨论重要的四层 01,应用层(Application):应用层是个很广泛的概念,有一些基本相同的系统级TCP/IP应用以及应用协议,也有许多的企业应用和互联网应用.http协议在应用层运行. 02,传输层(Tanspot):传输层包括UDP和TCP,UDP几乎不对报文进行检查,而