banner
肥皂的小屋

肥皂的小屋

github
steam
bilibili
douban
tg_channel

信息收集-端口扫描及服务识别

端口扫描及服务识别#

这部分重点介绍nmap常见参数搭配用法,这也是我一直想弄懂的,借写文章的机会来梳理一下

这篇文章先介绍在已知主机的情况下对主机进行端口扫描,最后补充下前面文章遗留的问题:

nmap zmap massca对 C 段进行扫描

御剑高速 TCP 全端口扫描工具#

属于纯端口扫描工具

工具主要针对一段 IP 段内的详细全端口检测,下载地址就不提供了很好搜,用软件扫一下我网站的真实 ip 看下结果:

image

还是有一些端口扫描不到,不过速度还是非常快的

censys.io#

这是一个在线服务器扫描网站,能扫描网站的服务器信息,暂且把它归为端口扫描工具:

image

扫描速度还是很快的,而且识别出了我用的是腾讯云的 CDN,扫描出了服务器的真实 ip 以及三个端口 (虽然还是没扫全),值得推荐!

nmap#

如果是自己去网上找 nmap 用法,由于每个师傅的用法不同以及 nmap 版本更新中的参数作用变化等原因

你可能会在不同的师傅那看到某个参数不同的解释和用法 (踩坑的人对自己踩过的坑总是显得尤为在意)

所以,直接查看官方文档:https://nmap.org/book/man.html

虽然官方中文文档也有,但是它是根据Nmap4.5.0版本来介绍的,而截至写文章时Nmap的版本是7.70

故要看最新的用法还是用谷歌浏览器翻译英文文档看好了

nmap 安装及配置#

Linux比如Kali中是自带的,就不说了,我们这里下载的是Window下的便捷版:

image

下载完我们先配置一下环境变量,就不用每次进到nmap的目录打开命令行了:

image

nmap 参数解释#

nmap有六种常用的端口状态:

Open 表示目标计算机上的应用程序正在侦听该端口上的连接/数据包。
Closed 端口没有应用程序监听它们。
Filtered 意味着防火墙,过滤器,或其他网络障碍物阻塞的端口,使得Nmap不能确定是open或closed。
unfiltered 当端口响应Nmap的探测器时,Nmap无法确定它们是打开还是关闭。
open|filtered、closed|filtered nmap不能确定端口处于这两种状态中的哪种状态

以下为官方文档翻译过来的参数,我将一部分一部分做讲解

参考文章:

选择目标:

可以传递主机名,IP地址,网络等。
例如:scanme.nmap.org,microsoft.com / 24,192.168.0.1; 10.0.0-255.1-254
-iL <inputfilename>:从主机/网络列表输入
-iR <num hosts>:选择随机目标
--exclude <host1 [,host2] [,host3],...>:排除主机/网络
--excludefile <exclude_file>:从文件中排除列表

这个就很简单了:

  • 扫描网站:nmap soapffz.com
  • 扫描内网网段:nmap 192.168.2.0/24或者nmap 192.168.2.3-5

选择目标这里的参数基本都用不到

主机发现:

-sL 列表扫描,仅将指定的目标IP列举出来,不进行主机发现
-sn 和 -sP一样,只利用ping扫描进行主机发现,不扫描目标主机的端口
-Pn 将所有指定的主机视为已开启状态,跳过主机发现过程
-PS TCP SYN ping,发送一个设置了SYN标志位的空TCP报文,默认端口为80,也可指定端口
-PA TCP ACK ping,发送一个设置了ACK标志位的空TCP报文,默认端口为80,也可指定端口
-PU UDP ping,发送一个空的UDP报文到指定端口,可穿透只过滤TCP的防火墙
-PR 使用ARP ping
-n/-R -n不用域名解析,加速扫描,-R为目标IP做反向域名解析,扫描较慢一些
-dns-servers 自定义域名解析服务器地址
--system-dns:使用OS的DNS解析器
-traceroute 目标主机路由追踪

-sn-Pn是对立的,前者使用ping扫描,禁用端口扫描,后者禁用ping扫描,为什么会有这两个选项呢?

因为如果主机屏蔽了 ping 请求,Nmap 可能会认为该主机没有开机。这将使得 Nmap 无法进行进一 步检测,比如端口扫描、服务版本识别和操作系统识别等探测工作。为了克服这一问题,就需要禁用 Nmap 的主机检测功能。在指定这个选项之后,Nmap 会认为目标主机已经开机并会进行全套的检测工作,所以,一般来说在这两个选项之前我们更倾向于使用后者

一般建议使用-Pn选项

另外域名解析会浪费一部分时间,虽然默认是有时会解析域名,但是我建议设置为-n从不进行DNS解析以节约解析时间。

扫描方法:

-sS / sT / sA / sW / sM:TCP SYN / Connect()/ ACK / Window / Maimon扫描

-sS TCP 同步扫描 (TCP SYN),因为不必全部打开一个 TCP 连接,所以这项技术通常称为半开扫描 (half-open)。这项技术最大的好处是,很少有系统能够把这记入系统日志。不过,你需要 root 权限来定制 SYN 数据包(Windows即为管理员权限)。
-sT TCP connect() 扫描,建立TCP的三次握手连接来进行信息的传递。这种扫描很容易被检测到,在目标主机的日志中会记录大批的连接请求以及错误信息。一般不建议使用。
-sA ACK 扫描,原理是发送一个ACK包给目标主机,不论目标主机的端口是否开启,都会返回相应的RST包,通过判断RST包中的TTL来判断端口是否开启,TTL值小于64端口开启,大于64端口关闭。这项高级的扫描方法通常可以用来穿过防火墙。
-sW 滑动窗口扫描,非常类似于 ACK 的扫描。
-sM 探测报文是 FIN/ACK。 根据 RFC 793 (TCP) ,无论端口开放或者关闭,都应该对这样的探测响应 RST 报文。 然而,Uriel 注意到如果端口开放,许多基于 BSD 的系统只是丢弃该探测报文。

-sU:UDP扫描,唯一的UDP扫描方式。

虽然UDP扫描结果没有 TCP扫描结果的可靠度高,但渗透测试人员不能因此而轻视UDP扫描,毕竟UDP端口代表着可能会有价值的服务端程序。但是UDP扫描的最大问题是性能问题。由干Linux内核限制1秒内最多发送一次ICMP Port Unreachable信息。按照这个速度,对一台主机的65536个UDP端口进行完整扫描,总耗时必定会超过18个小时。
优化方法主要是:
1.进行并发的UDP扫描;
2.优先扫描常用端口;
3.在防火墙后面扫描;
4.启用--host-timeout选项以跳过响应过慢的主机。
假如我们需要找到目标主机开放了哪些 UDP端口。为提高扫描速度,我们仅扫描53端口(DNS)和161端口(SNMP)。
可以使用命令nmap -sU 192.168.56.103 -p 53,161

-sN / sF / sX:TCP Null,FIN和Xmas扫描

NULL 扫描不设置任何控制位; FIN扫描仅设置FIN标志位:XMAS扫描设置FIN、PSH和URG的标识位。如果目标主机返回了含有RST标识位的响应数据,则说明该端口处于关闭状态;如果目标主机没有任何回应,则该端口处于打开|过滤状态。

NULL扫描是一种反向的扫描方法,通过发送一个没有任何标志位的数据包给服务器,然后等待服务器的返回内容。这种扫描的方法比前面提及的扫描方法要隐蔽很多,但是这种方法的准确度也是较低的, 主要的用途是用来判断操作系统是否为windows,因为windows不遵守RFC 793标准,不论端口是开启还是关闭的都返回RST包

但是虽然NULL具有这样的一些用处,但是NULL也有如下缺点
1、NULL方法的精确度不高,端口的状态返回的不是很准确
2、要获取目标主机的运行系统,可以使用参数(-O),来获取对于一些操作系统无法准确判断的,可以加上参数(-osscan-guess)
3、NULL扫描易被过滤

--scanflags <flags>:自定义TCP扫描标志
-sI <zombie host [:probeport]>:空闲扫描

采用-sI选项后,将通过指定的僵尸主机发送扫描数据包。本机并不与目标主机直接通信。如果对方网络里有IDS,IDS将认为发起扫描的主机是僵尸主机。

-sY / sZ:SCTP INIT / COOKIE-ECHO扫描

SCTP INIT 扫描类似 TCP SYN 扫描,他也是打开一个半开的连接,而不是建立一个完整的 SCTP 关联。如果目标端口回复一个 INIT-ACK 数据包,则说明端口是开放的,如果回复一个 ABORT 数据包,端口是关闭的,如果没有回复,端口会被标记标记为被过滤,当然如果收到了 ICMP 不可达的消息( type 3, code 0, 1, 2, 3, 9, 10, or 13 )也会被标记为被过滤。
如果目标端口开放,则会丢弃之前没有发起关联请求的 SCTP COOKIE ECHO 数据包,如果端口是关闭的则会返回一个 SCTP ABORT 数据包。所以这个扫描技术,无法分辨过滤和开放,只能分辨出关闭的端口。

-sO:IP协议扫描
-b <FTP中继主机>:FTP反弹扫描

从参数解释中我们可以看出-sT选项是默认的也是最不推荐的,一般我们使用半开扫描-sS

当发现可能有防火墙时,我们可以使用-sA-sW选项来尝试绕过防火墙扫描。

另外,我们也可以使用-sUUDP 扫描方式来探测常见的 UDP 端口,可能会有意外收获。

扫描端口及扫描端口的方式:

-p <端口范围>:仅扫描指定的端口
例如:-p22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080,S:9
--exclude-ports <端口范围>:从扫描中排除指定的端口
-F:快速模式 - 扫描比默认扫描更少的端口,一般来说只扫描100个常用端口
-r:连续扫描端口,从小到大扫描端口
--top-ports <number>:扫描<number>最常见的端口,比如扫描最常见的300个端口:--top-ports 300
--port-ratio <ratio>:扫描端口比<ratio>更常见

个人建议,在快速概览主机端口的时候使用选项--top-ports 1000

当你想要完整的扫描报告的时候,还是需要所有端口都扫一遍-p1-65535

服务 / 版本检测:

-sV:探测开放端口以确定服务/版本信息

由于不是所有的 Nmap 侦测都会得到反馈,需要对侦测的强度进行设定,在服务侦测中有三个等级。
等级越高,侦测过程中的尝试次数越多,识别服务的可能性就会越大。

--version-intensity <level>:从0(亮)到9(尝试所有探针)设置
--version-light:限制最可能的探针(强度2)
--version-all:尝试每一个探针(强度9)

--version-trace:显示详细的版本扫描活动(用于调试)

-sV建议使用,但是后面的-A 选项的功能中包含这个功能

脚本扫描:

-sC:相当于--script = default
--script = <Lua scripts>:<Lua scripts>是逗号分隔的列表
目录,脚本文件或脚本类别
--script-args = <n1 = v1,[n2 = v2,...]>:为脚本提供参数
--script-args-file = filename:在文件中提供NSE脚本args
--script-trace:显示发送和接收的所有数据
--script-updatedb:更新脚本数据库。
--script-help = <Lua scripts>:显示有关脚本的帮助。
<Lua scripts>是以逗号分隔的脚本文件列表或脚本的类别。

-sC建议使用,但是后面的-A 选项的功能中包含这个功能

操作系统检测:

-O:启用OS检测
--osscan-limit:将OS检测限制为有希望的目标
--osscan-guess:更积极地猜测操作系统

这里的--osscan-guess可能会在你想知道对方的主机系统时派上用场。

时间和性能:

采用<time>的选项以秒为单位,或追加'ms'(毫秒),
该值的's'(秒),'m'(分钟)或'h'(小时)(例如30m)。
-T <0-5>:设置时序模板(越高越快)

paranoid(0):扫描周期为5分钟,且不会以并行方式同时发送多组数据。这种模式 的扫描不会被IDS检测到。
sneaky(1):扫描周期为15秒,且不会以并行方式同时发送多组数据。
polite(2):扫描周期为0.4秒,且不会以并行方式同时发送多组数据。
normal(3):此模式同时向多个目标发送多个数据包,为	Nmap默认的模式,该模式能自动在扫描时间和网络负载之间进行平衡。
aggressive(4):在这种模式下,Nmap对每个既定的主机只扫描5分钟,然后扫描下一台主机。它等待响应的时间不超过1.25秒。
insane(5):在这种模式下,Nmap对每个既定的主机仅扫描75秒,然后扫描下一台主机。它等待响应的时间不超过0.3秒。
快的扫描也是有缺点的,扫描的周期过快,会很容易被防火墙和IDS发现并记录
因为防火墙大多数会将端口周期过段识别为扫描从而屏蔽掉

--min-hostgroup / max-hostgroup <size>:并行主机扫描组大小
--min-parallelism / max-parallelism <numprobes>:探测并行化
--min-rtt-timeout / max-rtt-timeout / initial-rtt-timeout <time>:指定探测往返时间。
--max-retries <tries>:端口扫描探测重传的上限数量。
--host-timeout <time>:在此之后放弃目标
--scan-delay /  -  max-scan-delay <time>:调整探针之间的延迟
--min-rate <number>:发送数据包的速度不低于每秒<number>
--max-rate <number>:发送数据包的速度不超过<number>每秒

时间和性能这里,一般用不到指定并行数量和发包速度这么详细。

时序模板默认为-T3,也就是normal不做任何优化

防火墙 / IDS 逃脱和防御:

-f; --mtu <val>:分段数据包(可选择w /给定MTU),这个选项可避免对方识别出我们探测的数据包。

指定这个选项之后, Nmap将使用8字节甚至更小数据体的数据包。

-D <decoy1,decoy2 [,ME],...>:用诱饵披露扫描,这个选项应指定假IP,即诱饵的IP。

启用这个选项之后,Nmap在发送侦测数据包的时候会掺杂一些源地址是假IP(诱饵)的数据包。这种功能意在以藏木于林的方法掩盖本机的真实IP。也就是说,对方的log还会记录下本机的真实IP。您可使用RND生成随机的假IP地址,或者用RND:number的参数生成<number>个假IP地址。您所指定的诱饵主机应当在线,否则很容易击溃目标主机。另外,使用了过多的诱饵可能造成网络拥堵。尤其是在扫描客户的网络的时候,您应当极力避免上述情况。

-S <IP_Address>:欺骗源地址

源地址欺骗的原理是:通过将自己的IP伪装成为其他的IP去扫描目标主机从而骗过目标主机的追踪
假设要伪装成为1.1.1.1:参数-S 1.1.1.1 使用1.1.1.1进行扫描,让防火墙误以为是来自1.1.1.1的扫描行为
在使用的时候要注意与-e进行使用,因为除了制定要伪装成为的对象IP外,还要指定返回的IP地址

-e <iface>:使用指定的接口
-g /  -  source-port <portnum>:使用给定的端口号
--proxies <url1,[url2],...>:通过HTTP / SOCKS4代理的中继连接
--data <hex string>:为发送的数据包附加自定义有效负载
--data-string <string>:为发送的数据包附加自定义ASCII字符串
--data-length <num>:将随机数据附加到已发送的数据包
--ip-options <options>:发送带有指定ip选项的数据包
--ttl <val>:设置IP生存时间字段
--spoof-mac <mac address / prefix / vendor name>:欺骗你的MAC地址
--badsum:使用伪TCP / UDP / SCTP校验和发送数据包

当你已经探测到可能有防火墙时,可以使用-F选项来减小探测包的大小,从而绕过防火墙。

-D选项构造虚假 ip 也是经常被用到的,RND生成随机假的IP地址这个选项不建议使用,因为如果生成的 ip 对应的诱饵主机是关闭的或者不存在的,那么就不可能发送扫描的命令给目标主机,容易造成目标主机崩溃

建议直接使用ping某个网站的 ip (禁止ping的网站除外),使用网站的ip作为诱饵主机

使用Me代表自己的真实地址,比如同时使用soapffz.com网站ip和我电脑真实ip一起快速扫描nmap.org

nmap -F -D 140.143.2.176,ME nmap.org

输出报告:

-oN / -oX / -oS / -oG <file>:正常输出扫描,XML,s | <rIpt kIddi3,和Grepable格式,分别为给定的文件名。
-oA <basename>:一次输出三种主要格式

-oN:正常输出,不显示runtime信息和警告信息。
-oX:生成的XML格式文件可以转换成HTML格式文件,还可被Nmap的图形用户界面解析,也便于导入数据库。
所以建议将结果都保存为XML文件。
-oS:输出类似于交互工具输出
-oG:生成便于Grep使用的文件,虽然这种文件格式已经过时,但仍然很受欢迎。这种格式的文件,其内容由注释(由#开始)和信息行组成。信息行包含6个字段,每个字段的字段 名称和字段值以冒号分割,字段之间使用制表符隔开。这些字段的名称分别为Host、Ports、Protocols、Ignored State、OS、Seq Index、IP ID Seq 和Status。这种格式的文件便于grep或awk之类的UNIX指令整理扫描结果。
为使用方便,利用-oA选项可将扫描结果以标准格式、XML格式和Grep格式一次性输出。分别存放在.nmap,.xml和.gnmap文件中。

-v:增加详细级别(使用-vv或更高级别以获得更好的效果)
-d:提高调试级别(使用-dd或更多以获得更好的效果)
--reason:显示端口处于特定状态的原因
--open:仅显示打开(或可能打开)的端口,这个很推荐使用。
--packet-trace:显示发送和接收的所有数据包
--iflist:打印主机接口和路由(用于调试)
--append-output:附加到而不是clobber指定的输出文件
--resume <filename>:恢复中止扫描
--stylesheet <path / URL>:用于将XML输出转换为HTML的XSL样式表
--webxml:来自Nmap.Org的参考样式表,用于更多可移植的XML
--no-stylesheet:防止与XML输出相关联的XSL样式表

建议使用-open -vv选项来输出详细信息并且只包含打开或可能打开的端口

报告输出建议使用-oX生成.XML的报告,或者直接-oA选项一次输出.nmap .xml .gnmap三种报告

杂项:

-6:启用IPv6扫描
-A:启用操作系统检测,版本检测,脚本扫描和跟踪路由
--datadir <dirname>:指定自定义Nmap数据文件位置
--send-eth /  -  send-ip:使用原始以太网帧或IP数据包发送
--privileged:假设用户具有完全特权
--unprivileged:假设用户缺少原始套接字权限
-V:打印版本号
-h:打印此帮助摘要页面。

当你使用-A选项时,相当于同时使用了以下四个命令:

服务版本识别(-sV)
操作系统识别(-O);
脚本扫描(-sC);
Traceroute(–traceroute)。

至于NSE脚本的漏洞探测脚本部分本篇不做介绍,因为本篇是针对端口和服务的扫描,漏洞的扫描将在下篇漏洞扫描器中讲到。

nmap 常用扫描#

** 在 nmap 运行的时候,如果我们可以像其他编程一样打 “断点”,直接按键盘的 d 键就行了,如果想知道运行的进度可以按下 X 键 **

我们用上面所学到的参数来扫描以下我的网站 (假设已绕过 CDN 获得了真实 ip,因为扫描 CDN 节点没有意义)

最终期望的结果是:

通过一条命令获得所有开放的端口,猜测端口上开启的服务,猜测服务器版本信息并尽可能地节省时间

是的,我打我自己.jpg

先尝试下默认的-sT扫描方式,快速扫描 100 个常见端口并打印详细信息:

nmap -sT -F -vv 140.143.2.176

image

1. 从结果中可以看到使用了ping消耗了 1.05s,DNS查询消耗了 3.86s 2. 我是直接扫描ip的你要查询DNS干啥,扫描的方式是完整的一次TCP三次握手

接下来尝试下禁ping,使用TCP同步扫描,也就是半开扫描,使用更快的扫描速度,尝试获取每个端口的服务及版本信息,扫描常见 1000 个端口,禁止使用DNS查询:

nmap -vv -Pn -sS -T4 -sV --top-ports 1000 -n 140.143.2.176

image

1. 可以看到扫描的方式变为了SYN Stealth Scan即 SYN 秘密扫描 2. 在增加了扫描的端口数量后,我们比上一次多扫出了一个888端口 3. 另外加了-sV选项之后扫描报告中多了一列VERSION,也就是服务的版本

耗费的时间只增加了一点点,但是扫描的结果比上一次更加全面了

我们在刚才的基础上使用-sAACK 扫描方式,使用更快速的方式,扫描所有端口,并且尽可能地探测操作系统:

nmap -vv -Pn -sA -T5 -sV -p1-65535 -O --osscan-guess -n 140.143.2.176

image

可以看到在相同情况下-sA选项比-sS更耗费时间

所以一般只有在对方存在防火墙想要绕过时才建议使用-sA选项,平时使用-sS足够

sA/sW/sM这三种探测方式消耗的时间排序:sM > sW > sA

另外三种扫描方式sN/sF/sX暂时没用到,后面用到再做介绍

最后给出能目前我知道的能扫描出所有端口及详细信息,最节省时间的nmap命令:

nmap -v -Pn -sS -T5 -sV -p1-13000 --version-light -O --osscan-guess -n 140.143.2.176

效果如下 (为了节省时间我只扫描前 13000 个端口):

image

image

果然我的12315端口不在常用端口里面,直到我指定范围才扫描出来

操作系统猜测最有可能为Linux4.4Linux4.0,实际上是3.10

image

但是这条命令还不是完美的,因为我指定了范围,我希望能以最快的速度扫描所有端口

但是即使是-sS也不太给力,从上面这两个例子我们可以看出nmap对全端口扫描并不在行

可以和后面介绍的无状态端口扫描器Masscan配合起来使用,实现 “精准制导”。

zmap#

ZMap 是一个开源网络扫描工具,可以帮助研究人员快速的进行全网检测。只需要一台机器和足够上行网络速度,就可以以达到千兆以太网的理论值速度并在 45 分钟内扫描全网络 IPv4 地址。

它是由我们前面介绍的censys.io的站长开发的工具。

GitHub 地址:

ZMap is a fast single packet network scanner designed for Internet-wide network surveys.

zmap不支持 Windows,我们这里使用一台Ubuntu Desktop 18.04.1 LTS来安装和使用zmap

执行:sudo apt install zmap -y 即可完成安装

常用参数如下:

-p, –target-port=port:需要扫描的TCP 端口号 (比如443)
-o, –output-file=name:将扫描结果输出到文件
-b, –blacklist-file=path:黑名单文件,即排除在扫描范围外的地址。在conf/blacklist.example文件中有实例,每同一行写一个网段,比如192.168.0.0/16。
-n, –max-targets=n,检测的上限范围,可以是一个数字如-n 10000,也可以是扫描地址空间中的百分比
-N, –max-results=n:接收到一定数量的结果后退出扫描
-t, –max-runtime=secs:最大扫描(发包)时间
-r, –rate=pps:设置发包速率(packets/sec)
-B, –bandwidth=bps:设置发包带宽(bits/second
-c, –cooldown-time=secs:接受返回的时间(default=8)
-T, –sender-threads=n:发包的线程数 (默认为1):-P, –probes=n
送达每个IP的探测器数量(默认为1):网络选项
-s, –source-port=port|range:发包的源端口(s)
-S, –source-ip=ip|range:发包的源IP,也可以是IP地址段
-G, –gateway-mac=addr:发包的网关MAC地址
-i, –interface=name:网络端口
–list-probe-modules:列出可用的探测器模块
-M, –probe-module=name:选择探测器模块 (默认为tcp_synscan)
–probe-args=args:设置探测器模块的参数
–list-output-fields:列出所选择的探测器模块
输出选项:ZMap 允许用户定义和编写自己的输出模块。输出模块负责处理探测器模块的返回结果并且展示给用户。
–list-output-modules:列出所有输出模块
-O, –output-module=name:设置输出模块
–output-args=args:设置输出模块的参数
-f, –output-fields=fields
列出所选择的输出模块:–output-filter
输出模块过滤器:附加选项
-C, –config=filename:读一个配置文件,其中可以包含特殊的选项
-q, –quiet:安静模式
-g, –summary:在扫描结束后,打印配置和结果汇总
-v, –verbosity=n:log的等级 (0-5, 默认为3)
-h, –help:显示帮助
-V, –version:打印版本

虽然zmap-p选项是指定端口,但是不能用1-65535这样的参数

zmap的用途更多的偏向于扫描指定范围内主机的某个指定端口是否开放,比如:

zmap -p 80 1.2.3.4 10.0.0.3:扫描1.2.3.4,10.0.0.3这两个ip的80端口
zmap -p 80 10.0.0.0/8 192.168.0.0/16:扫描扫描两个子网的80端口
zmap -p 80:在Internet上查找tcp/ 80上的主机并输出到stdout
zmap -N 5 -B 10M -p 80:找到5个HTTP服务器,以10 Mb/s扫描

使用zmap扫描临时获得baidu.com的 C 段:123.125.114.1/24 的8080端口:

image

基本 1s 就能扫完,但是这与本文扫描指定主机的所有端口目标不太符合,这里就不再继续介绍

Masscan#

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

masscan虽然能在Windows下使用,但是要配置MinGW等编译环境,所以在此做演示我们也使用Ubuntu环境

安装方式:

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

如果需要在任何位置使用masscan命令的话,执行:

cd ~
cp masscan/bin/masscan /bin

masscan常用选项:

-p               指定要扫描的端口,同时指定多个端口要用逗号隔开
--rate           指定发包速率,根据你自己的实际带宽来定,我自己是20M的光纤,一般给1000足矣,一两兆的vpn,给100就差不多了,都是粗略估计的,懒的算
--open-only      仅显示开放的端口
--banners        获取banners
-c               使用自定义的扫描配置文件
--ping           扫之前是否要先ping下目标
-oL              把扫描结果存到指定文件中
--excludefile    排除不扫描的ip段

先介绍下本文的原本目标,扫描指定 ip 的所有端口:

masscan -p1-65535 140.143.2.176

使用这条命令的话速度比nmap-sS还要慢一大截,这是因为默认情况下,

Masscan 扫描速度为每秒 100 个数据包,这是相当慢的。

你也可以使用--rate选项并指定一个值,我们比较下使用默认 100 发包速度和加快发包速率的结果:

masscan -p1-65535 140.143.2.176 --rate 1000 > 1.txt
masscan -p1-65535 140.143.2.176 > 2.txt

image

image

由此可见发包个数与扫描出来的端口数量成反比

其他的参数,保存,加载配置什么的,都没什么的好说的,核心就是直接指定端口扫就行了。

端口扫描及服务识别总结#

如果只是简单的扫描以下常见的端口,用御剑高速 TCP 全端口扫描工具或者censys.io已经完全足够

当然,有条件的话还是非常建议直接使用nmap,对上面的参数解释和用法最后归结为以下几条:

默认的扫描方式-sT不推荐,建议使用-sS选项
默认时-T3级别,日常扫描可以使用-T4
-A选项扫描太多东西了,一般使用-sV和-O --osscan-guess即可
端口扫描时

另外nmap还有很多用法比如主机探测部分我没有一一比较,后面我用到的时候会回来更新这篇文章。

当然,nmap-sS扫描常用端口及猜测端口对应的服务信息配合上masscan不改变速率的全端口扫描

基本上就能满足这篇文章的初衷 - 扫描指定服务器的所有端口及信息了。

本文完。

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。