nmap使用 - JunMo博客

JunMo的博客

2019
记录生活
首页 » 工具使用 » nmap使用

nmap使用

介绍

nmap是一个开源免费的网络发现工具,通过它能够找出网络上在线的主机,并测试主机上哪些端口处于监听状态,接着通过端口确定主机上运行的应用程序类型与版本信息,最后利用它还能侦测出操作系统的类型和版本。由此可见,nmap是一个功能非常强大的网络探测工具,同时它也成为网络黑客的最爱,因为nmap所实现的这些功能正是黑客入侵网络的一个基本过程。站在安全运维的角度,只有了解了黑客入侵的基本方式和过程,才能有目的、有针对性地进行安全防护,这也正是本节重点介绍nmap这个网络嗅探工具的原因。

nmap是Network Mapper的缩写,由Fyodor在1997年创建,现在已经成为网络安全必备的工具之一,目前最新的版本为nmap6.40,更多详细信息可以参考官方网站:www.nmap.org。nmap作为一个流行的安全工具,它的主要特点有:

非常灵活。nmap支持10多种扫描方式,并支持多种目标对象扫描。

支持主流操作系统。nmap支持Windows、Linux、BSD、Solaris、AIX、Mac OS等多种平台,可移植性强。

使用简单。nmap安装、使用都非常简单,基本用法就能满足一般使用需求。

自由软件。nmap是在GPL协议下发布的,在GPL License的范围内可自由使用。

指定目标

1. 192.168.1.0/24 扫描整个网段 0./24 代表0-255

2. 指定范围 192.168.1.1-255 192.168.1-255.1(任意位置)

nmap -iL 文件名 (扫描文件里面的ip,要注意参数大小写哦!) 

主机名或者ip地址列表
列表中的项可以是Nmap在 命令行上接受的任何格式(IP地址,主机名,CIDR,IPv6,或者八位字节范围)。 每一项必须以一个或多个空格,制表符或换行符分开。 如果您希望Nmap从标准输入而不是实际文件读取列表, 您可以用一个连字符(-)作为文件名。

nmap -iR 数量 

(该参数可以用来选择随机Internet主机进行扫描。 NMAP会随机生成目标的指定数量,并试图对其进行扫描)

nmap -excludefile 文件名

(不扫描文件里面包含的ip)

主机发现

nmap -sL

(列出给出目标的具体内容,默认会对地址进行反向解析,显示主机名。)

nmap -sn

(不进行端口扫描)

在以前的Nmap中,-sn被称为-sP。-sP(Ping扫描)

nmap -Pn

(无ping扫描,跳过主机发现阶段,把每个都IP当成存活主机。)

 nmap -P0 协议号列表

(IP 协议 ping)

一个较新的主机发现选项是IP协议ping,它将IP数据包发送到IP报头中指定的协议号。协议列表的格式与前面讨论的TCP、UDP和SCTP主机发现选项的端口列表相同。如果没有指定协议,默认的是为ICMP(协议1)、IGMP(协议2)和ipin-IP(协议4)发送多个IP数据包。默认的协议可以在编译时通过更改nmap.h中的默认proat探测端口规范来配置。注意,对于ICMP、IGMP、TCP(协议6)、UDP(协议17)和SCTP(协议132),数据包是用适当的协议标头发送的,而其他协议被发送时,除了IP报头之外没有附加的数据(除非有任何数据——数据字符串,或者——数据长度选项被指定)。

 nmap -PS 端口列表

(TCP SYN Ping)

1.该选项发送一个设置了SYN标志位的空TCP报文,默认端口为80。不同的端口可以作为选项制定(如 -PS22,23,25,80,113,1050,3500)
2.SYN标志位告诉对方您正试图建立一个连接。 通常目标端口是关闭的,一个RST (复位) 包会发回来。 如果碰巧端口是开放的,目标会进行TCP三步握手的第二步,回应 一个SYN/ACK TCP报文。
3.无论RST还是SYN/ACK响应都告诉Nmap该主机正在运行。然后运行Nmap的机器则会扼杀这个正在建立的连接, 发送一个RST而非ACK报文,ST报文是运行Nmap的机器而不是Nmap本身响应的,因为它对收到 的SYN/ACK感到很意外。

nmap -PA端口列表

(TCP ACK Ping)

1.ACK报文表示确认一个建立连接的尝试,但该连接尚未完全建立。 所以远程主机应该总是回应一个RST报文, 因为它们并没有发出过连接请求到运行Nmap的机器,如果它们正在运行的话。
2.如果非特权用户尝试该功能, 或者指定的是IPv6目标,前面说过的connect()方法将被使用。 这个方法并不完美,因为它实际上发送的是SYN报文,而不是ACK报文。
3.他的默认端口和修改方法跟-PS一致
4.SYN探测更有可能用于这样的系统,由于没头没脑的ACK报文 通常会被识别成伪造的而丢弃。解决这个两难的方法是通过即指定 -PS又指定-PA来即发送SYN又发送ACK。

 nmap -PU 端口列表

(UDP Ping)

1.发送一个空的(除非指定了–data-length UDP报文到给定的端口。端口列表的格式和前面讨论过的-PS和-PA选项还是一样。 如果不指定端口,默认是31338。修改方法和-PA -PS一致
2.如果目标机器的端口是关闭的,UDP探测应该马上得到一个ICMP端口无法到达的回应报文。 这对于Nmap意味着该机器正在运行。 许多其它类型的ICMP错误,像主机/网络无法到达或者TTL超时则表示down掉的或者不可到达的主机。 没有回应也被这样解释。如果到达一个开放的端口,大部分服务仅仅忽略这个 空报文而不做任何回应。这就是为什么默认探测端口是31338这样一个 极不可能被使用的端口。少数服务如chargen会响应一个空的UDP报文, 从而向Nmap表明该机器正在运行。

nmap -PR 

(ARP Ping)

如果Nmap发现目标主机就在它所在的局域网上,它会进行ARP扫描。 即使指定了不同的ping类型(如 -PI或者 -PS) ,Nmap也会对任何相同局域网上的目标机使用ARP。 如果您真的不想要ARP扫描,指定 –send-ip。
对于IPv6(-6选项),-PR使用ICMPv6的邻居发现而不是ARP。在RFC 4861中定义的邻居发现可以看作是IPv6等效的。

端口状态

open(开放的)

应用程序正在该端口接收TCP 连接或者UDP报文。

closed(关闭的)

关闭的端口对于Nmap也是可访问的(它接受Nmap的探测报文并作出响应), 但没有应用程序在其上监听。

filtered(被过滤的)

由于包过滤阻止探测报文到达端口, Nmap无法确定该端口是否开放。

unfiltered(未被过滤的)

未被过滤状态意味着端口可访问,但Nmap不能确定它是开放还是关闭。

open|filtered(开放或者被过滤的)

当无法确定端口是开放还是被过滤的,Nmap就把该端口划分成 这种状态。
开放的端口不响应就是一个例子。

closed|filtered(关闭或者被过滤的)

该状态用于Nmap不能确定端口是关闭的还是被过滤的。 它只可能出现在IPID Idle扫描中

端口扫描技术

nmap -sS

(TCP SYN扫描 半开放扫描)

半开放扫描,不打开一个完整的TCP链接
它发送一个SYN报文,然后等待响应。 SYN/ACK表示端口在监听 (开放),而 RST (复位)表示没有监听者。如果数次重发后仍没响应, 该端口就被标记为被过滤。如果收到ICMP不可到达错误 (类型3,代码1,2,3,9,10,或者13),该端口也被标记为被过滤。

nmap -sT 

(TCP connect()扫描)

Nmap通过创建connect() 系统调用要求操作系统和目标机以及端口建立连接,而不像其它扫描类型直接发送原始报文。 这是和Web浏览器,P2P客户端以及大多数其它网络应用程序用以建立连接一样的 高层系统调用。当Nmap连接,然后不发送数据又关闭连接, 许多普通UNIX系统上的服务会在syslog留下记录,有时候是一条加密的错误消息。

nmap -sU

(UDP 扫描)

1.UDP扫描用-sU选项激活。它可以和TCP扫描如 SYN扫描 (-sS)结合使用来同时检查两种协议。
2.UDP扫描发送空的(没有数据)UDP报头到每个目标端口。 如果返回ICMP端口不可到达错误(类型3,代码3), 该端口是closed(关闭的)。 其它ICMP不可到达错误(类型3, 代码1,2,9,10,或者13)表明该端口是filtered(被过滤的)。 偶尔地,某服务会响应一个UDP报文,证明该端口是open(开放的)。 如果几次重试后还没有响应,该端口就被认为是 open|filtered(开放|被过滤的)。 这意味着该端口可能是开放的,也可能包过滤器正在封锁通信。 可以用版本扫描(-sV)帮助区分真正的开放端口和被过滤的端口。

nmap -sY

(SCTP INIT 扫描)

SCTP INIT扫描类似TCP SYN扫描,他也是打开一个半开的连接,而不是建立一个完整的SCTP关联。如果目标端口回复一个INIT-ACK数据包,则说明端口是开放的,如果回复一个ABORT数据包,端口是关闭的,如果没有回复,端口会被标记标记为被过滤,当然如果收到了ICMP不可达的消息(type 3, code 0, 1, 2, 3, 9, 10, or 13)也会被标记为被过滤。

-sN; -sF; -sX 

(TCP Null,FIN,Xmas扫描)

1.如果扫描系统遵循该RFC,当端口关闭时,任何不包含SYN,RST,或者ACK位的报文会导致 一个RST返回,而当端口开放时,应该没有任何响应。只要不包含SYN,RST,或者ACK, 任何其它三种(FIN,PSH,and URG)的组合都行。Nmap有三种扫描类型利用这一点:
Null扫描 (-sN)

不设置任何标志位(tcp标志头是0)
FIN扫描 (-sF)

只设置TCP FIN标志位。
Xmas扫描 (-sX)

设置FIN,PSH,和URG标志位,就像点亮圣诞树上所有的灯一样。
2.除了探测报文的标志位不同,这三种扫描在行为上完全一致。 如果收到一个RST报文,该端口被认为是 closed(关闭的),而没有响应则意味着 端口是open|filtered(开放或者被过滤的)。 如果收到ICMP不可到达错误(类型 3,代号 1,2,3,9,10,或者13),该端口就被标记为 被过滤的。

nmap -sA 

(TCP ACK扫描)

1.这种扫描与目前为止讨论的其它扫描的不同之处在于 它不能确定open(开放的)或者 open|filtered(开放或者过滤的))端口。 它用于发现防火墙规则,确定它们是有状态的还是无状态的,哪些端口是被过滤的。
2.ACK扫描探测报文只设置ACK标志位(除非您使用 –scanflags)。当扫描未被过滤的系统时, open(开放的)和closed(关闭的) 端口 都会返回RST报文。Nmap把它们标记为 unfiltered(未被过滤的),意思是 ACK报文不能到达,但至于它们是open(开放的)或者 closed(关闭的) 无法确定。不响应的端口 或者发送特定的ICMP错误消息(类型3,代号1,2,3,9,10, 或者13)的端口,标记为 filtered(被过滤的)。

nmap -sW

(TCP滑动窗口扫描)

在某些系统上,开放端口用正数表示窗口大小(甚至对于RST报文) 而关闭端口的窗口大小为0。因此,当收到RST时,窗口扫描不总是把端口标记为 unfiltered, 而是根据TCP窗口值是正数还是0,分别把端口标记为open或者 closed

nmap -sM

(TCP Maimon扫描)

探测报文是FIN/ACK。 根据RFC 793 (TCP),无论端口开放或者关闭,都应该对这样的探测响应RST报文。 然而,Uriel注意到如果端口开放,许多基于BSD的系统只是丢弃该探测报文。

nmap –scanflags 

–scanflags选项可以是一个数字标记值如9 (PSH和FIN), 但使用字符名更容易些。 只要是URG, ACK,PSH, RST,SYN,and FIN的任何组合就行。例如,–scanflags URGACKPSHRSTSYNFIN设置了所有标志位,但是这对扫描没有太大用处。 标志位的顺序不重要。

nmap -sZ

(SCTP COOKIE ECHO扫描)

如果目标端口开放,则会丢弃之前没有发起关联请求的SCTP COOKIE ECHO数据包,如果端口是关闭的则会返回一个SCTP ABORT数据包。所以这个扫描技术,无法分辨过滤和开放,只能分辨出关闭的端口。

nmap –sI 僵尸主机地址:端口

(idlescan)

1.这种高级的扫描方法允许对目标进行真正的TCP端口盲扫描 (意味着没有报文从您的真实IP地址发送到目标)。相反,side-channel攻击 利用zombie主机上已知的IP分段ID序列生成算法来窥探目标上开放端口的信息。
2.如果您由于IPID改变希望探测zombie上的特定端口, 您可以在zombie 主机后加上一个冒号和端口号。 否则Nmap会使用默认端口(80)。

nmap -sO

(IP协议扫描)

IP 协议扫描可以让您确定目标机支持哪些IP协议 (TCP,ICMP,IGMP,等等)。从技术上说,这不是端口扫描 ,既然它遍历的是IP协议号而不是TCP或者UDP端口号。 但是它仍使用 -p选项选择要扫描的协议号, 用正常的端口表格式报告结果,甚至用和真正的端口扫描一样 的扫描引擎。因此它和端口扫描非常接近,也被放在这里讨论。

 -b (

(FTP弹跳扫描)

1.FTP协议的一个有趣特征(RFC 959) 是支持所谓代理ftp连接。
2.它允许用户连接到一台FTP服务器,然后要求文件送到一台第三方服务器。 这个特性在很多层次上被滥用,所以许多服务器已经停止支持它了。其中一种就是导致FTP服务器对其它主机端口扫描。 只要请求FTP服务器轮流发送一个文件到目标主机上的所感兴趣的端口。 错误消息会描述端口是开放还是关闭的。
3.这是绕过防火墙的好方法,因为FTP服务器常常被置于可以访问比Web主机更多其它内部主机的位置。
4.Nmap用-b选项支持ftp弹跳扫描。参数格式是 :@:。 是某个脆弱的FTP服务器的名字或者IP地址。 您也许可以省略:, 如果服务器上开放了匿名用户(user:anonymous password:-wwwuser@)。 端口号(以及前面的冒号) 也可以省略,如果使用默认的FTP端口(21)。

端口扫描设置

默认情况下,Nmap用指定的协议对端口1到1024以及nmap-services 文件中列出的更高的端口在扫描。

 nmap -p <端口号,端口列表> 

(扫描指定端口)

1.制定扫描某个或某些端口用逗号分隔,或者用链接符号表示范围也可。
2.对于-sO IP协议扫描,该选项用来指定协议号(0-255)。

nmap –exclede-ports <端口列表> 

(排除的端口)

指定排除的端口,如果是指定排除的协议号的话,他的值在0-255之间

nmap -F

(快速扫描)

在nmap的nmap-services 文件中(对于-sO,是协议文件)指定您想要扫描的端口。 这比扫描所有65535个端口快得多。 因为该列表包含如此多的TCP端口(1200多),这和默认的TCP扫描 scan (大约1600个端口)速度差别不是很大。如果用–datadir选项指定小的nmap-services文件 ,差别会很大。

nmap -r

(顺序扫描端口)

默认情况下,Nmap按随机顺序扫描端口 (除了出于效率的考虑,常用的端口前移)。可以指定-r来顺序端口扫描。

 nmap –port-ratio 

扫描nmap-services中给出的目标的一定比例,这个值在1.0-0.0之间。

nmap –top-ports

扫描nmap-services中的前多少个端口

服务和版本扫描

nmap -sV

(服务版本扫描)

扫描服务版本,也可以用-A同时进行操作系统探测和版本扫描。

 nmap –allports

(版本扫描时,不排除任何端口)

1.默认情况下,Nmap版本探测会跳过9100 TCP端口,因为一些打印机简单地打印送到该端口的 任何数据,这回导致数十页HTTP get请求,二进制 SSL会话请求等等被打印出来。
2.这一行为可以通过修改或删除nmap-service-probes 中的Exclude指示符改变

–version-intensity <强度>

(版本扫描强度)

强度在1到9之间,一般来说,强度越大,服务越有可能被正确识别

操作系统探测

nmap -O (

(启用操作系统检测)

也可以使用-A来同时启用操作系统检测和版本扫描。

nmap –osscan-limit

只对至少知晓一个端口开放或者关闭的主机进行操作系统探测

nmap –osscan-guess;–fuzzy

无法确定操作系统类型的时候,默认进行推测。但是使用这两项,会让猜测更加准确。

nmap –max-os-tries

(操作系统识别重试次数)

默认重试五次,

输出

nmap -oN 

(标准输出)

将结果输入制定文件

nmap -oX 

(XML输出)

将XML输出写入指定文件

-oS 

(ScRipT KIdd|3 oUTpuT)

脚本小子输出类似于交互工具输出,这是一个事后处理,适合于 ‘l33t HaXXorZ, 由于原来全都是大写的Nmap输出。

-oG 

(Grep输出)

这种方式最后介绍,因为不建议使用。XML输格式很强大,便于有经验 的用户使用。XML是一种标准,由许多解析器构成,而Grep输届更简化。XML是可扩展的,以支持新发布的Nmap特点。使用Grep输出的目的是忽略这些 特点,因为没有足够的空间。
然而,Grep输出仍然很常使用。它是一种简单格式,每行一个主机,可以 通过UNIX工具(如grep、awk、cut、sed、diff)和Perl方便地查找和分解。常可 用于在命令行上进行一次性测式。查找ssh端口打开或运行Sloaris的主机,只需要一个简单的grep主机说明,使用通道并通过awk或cut命令打印所需的域。
Grep输出可以包含注释(每行由#号开始)。每行由6个标记的域组成,由制表符及 冒号分隔。这些域有主机,端口, 协议,忽略状态,操作系统,序列号, IPID和状态。
这些域中最重要的是Ports,它提供了所关注的端口的细节,端口项由逗号分隔。每个端口项代表一个所关注的端口,每个子域由/分隔。这些子域有:端口号, 状态,协议, 拥有者,服务, SunRPCinfo和版本信息。

nmap -oA 

(输出至所有格式)

为使用方便,利用-oA选项 可将扫描结果以标准格式、XML格式和Grep格式一次性输出。分别存放在 .nmap,.xml和 .gnmap文件中。也可以在文件名前 指定目录名,如在UNIX中,使用~/nmaplogs/foocorp/, 在Window中,使用c:\hacking\sco on Windows。

-v

(提高输出信息的详细程度)<

-d [level]

(设置调试级别)<

–packet-trace

(跟踪发出的报文)<

-iflist

(列举端口和路由)<

 –append-out

(在输出文件住追加)<

–resume 

(继续中断的扫描)

如果标准扫描 (-oN)或Grep扫描(-oG)日志 被保留,用户可以要求Nmap恢复终止的扫描,只需要简单地使用选项 –resume并说明标准/Grep扫描输出文件,不允许 使用其它参数,Nmap会解析输出文件并使用原来的格式输出。使用方式 如nmap –resume 。Nmap将把新地结果添加到文件中,这种方式不支持XML输出格式,原因是将两次运行结果合并至一个XML文件比较困难。

–open

只显示开放或者可能开放的端口

#本篇文章内容均来自网络,仅供学习使用。

文章如无特别注明均为原创!
本文作者: JunMo
转载或复制请带上本文地址 http://mo60.cn/post-29.html
并注明出处 JunMo博客
原文地址《 nmap使用
发布于2019-7-9
收录状态: [百度已收录][360未收录]

分享到:


打赏

评论

游客

看不清楚?点图切换

切换注册

登录

您也可以使用第三方帐号快捷登录

切换登录

注册