nmap使用指南

一、目标指定

1.CIDR标志位 192.168.1.0/24

2.指定范围 192.168.1.1-255 192.168.1-255.1(任意位置)3.IPv6地址只能用规范的IPv6地址或主机名指定。 CIDR 和八位字节范围不支持IPv6,因为它们对于IPv6几乎没什么用。

-iL <文件名>

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

-iR <数量>

随机选择一定数量的目标

--exclude <主机名/地址>

不包含的主机

--excludefile <文件名>

不包含的主机的列表

二、主机发现

1.如果没有给出主机发现的选项,Nmap 就发送一个TCP ACK报文到80端口和一个ICMP回声请求到每台目标机器。2.一个例外是ARP扫描用于局域网上的任何目标机器。对于非特权UNIX shell用户,使用connect()系统调用会发送一个SYN报文而不是ACK 这些默认行为和使用-PA -PE选项的效果相同。3.另外要注意的是即使您指定了其它 -P*选项,ARP发现(-PR)对于局域网上的 目标而言是默认行为,因为它总是更快更有效。

-sL(列表扫描)

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

-sn(不进行端口扫描)

与-sn一起完成的默认主机发现包括一个ICMP响应请求、TCP SYN到端口443、TCP ACK到端口80,以及一个ICMP的时间戳请求。

在以前的Nmap中,-sn被称为-sP。-sP(Ping扫描)选项在默认情况下,发送一个ICMP回声请求和一个TCP报文到80端口。如果非特权用户执行,就发送一个SYN报文 (用connect()系统调用)到目标机的80端口。 当特权用户扫描局域网上的目标机时,会发送ARP请求(-PR), ,除非使用了--send-ip选项。 -sP选项可以和除-P0)之外的任何发现探测类型-P* 选项结合使用以达到更大的灵活性。 一旦使用了任何探测类型和端口选项,默认的探测(ACK和回应请求)就被覆盖了。

-Pn(无ping)

跳过主机发现阶段,把每个都IP当成存活主机。

-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报头之外没有附加的数据(除非有任何数据——数据字符串,或者——数据长度选项被指定)。

-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感到很意外。

-PA<端口列表>(TCP ACK Ping)

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

-PU <端口列表>(UDP Ping)

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

-PR(ARP Ping)

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

--disable-arp-ping (No ARP or ND Ping)

不使用ARP发现和ICMPv6邻居发现

-PY <端口列表> (SCTP INIT Ping)

1.一个SCTP INIT数据包,默认端口是80,如果要改变端口可以用如下形式: -PY22:-PY22,80,179,5060。注意PY和端口列表之间没有空格。2.SCTP INIT数据包表示本机想跟目标主机关联。一般情况下,目标主机的端口是关闭的,就会返回一个SCTP 数据包。如果目标主机端口是开放的,它就会回复一个SCTP INIT-ACK数据包。如果运行nmap的本机支持SCTP协议栈的话,本机会给目标主机回复一个SCTP ABORT数据包,而不是SCTP COOKIE-ECHO数据包,这个数据包是由系统内核发送的,因为他没有去向目标主机发起关联请求。3.本技术用于主机发现,所以不必关心端口是否开放,只要收到回复就可认为主机是存活的。4.在linux系统中,特权用户发送和接收raw SCTP数据包,非特权用户不支持这个扫描技术。

-PE; -PP; -PM(ICMP Ping Types)

-PE是ICMP echo请求时间戳和地址掩码查询可以分别用-PP和-PM选项发送。 时间戳响应(ICMP代码14)或者地址掩码响应(代码18)表示主机在运行。

-n   不域名解析

-R   所有IP做反向域名解析

--system-dns    使用本机的dns服务器

--dns-servers <server1,server2> (使用指定的dns服务器)

如果指定dns服务器无法使用,则会转向使用本机配置的dns服务器

三、端口状态

open(开放的)

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

closed(关闭的)

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

filtered(被过滤的)

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

unfiltered(未被过滤的)

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

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

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

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

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

四、端口扫描技术

-sS(TCP SYN扫描)

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

-sT(TCP connect()扫描)

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

-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)帮助区分真正的开放端口和被过滤的端口。

-sY(SCTP INIT scan)

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),该端口就被标记为 被过滤的。

-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(被过滤的)。

-sW(TCP窗口扫描)

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

-sM(TCP Maimon扫描)

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

--scanflags (定制的TCP扫描)

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

-sZ(SCTP COOKIE ECHO扫描)

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

--sI <僵尸主机地址:端口>(idlescan)

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

-sO(IP协议扫描)

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

-b <ftp relay host>(FTP弹跳扫描)

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

五、端口扫描设置

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

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

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

--exclede-ports <端口列表>(排除的端口)

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

-F(快速扫描)

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

-r(顺序扫描端口)

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

--port-ratio <ratio>

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

--top-ports

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

六.服务和版本扫描

-sV(版本扫描)

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

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

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

--version-intensity <强度>(版本扫描强度)

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

--version-light

相当于 --version-intensity 2

--vension-all

相当于 --version-intensity 9

--version-trace

打印出正在进行的版本扫描的详细信息

七、操作系统探测

-O (启用操作系统检测)

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

--osscan-limit

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

--osscan-guess;--fuzzy

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

--max-os-tries(操作系统识别重试次数)

默认重试五次,

八、扫描性能设置

--min-hostgroup <milliseconds>; --max-hostgroup <milliseconds> (调整并行扫描组的大小)

1.Nmap具有并行扫描多主机端口或版本的能力,Nmap将多个目标IP地址 空间分成组,然后在同一时间对一个组进行扫描。通常,大的组更有效。缺点是只有当整个组扫描结束后才会提供主机的扫描结果。如果组的大小定义 为50,则只有当前50个主机扫描结束后才能得到报告(详细模式中的补充信息 除外)。2.默认方式下,Nmap采取折衷的方法。开始扫描时的组较小, 最小为5,这样便于尽快产生结果;随后增长组的大小,最大为1024。确切的 大小依赖于所给定的选项。为保证效率,针对UDP或少量端口的TCP扫描,Nmap 使用大的组。--max-hostgroup选项用于说明使用最大的组,Nmap不 会超出这个大小。--min-hostgroup选项说明最小的组,Nmap 会保持组大于这个值。如果在指定的接口上没有足够的目标主机来满足所指定的最小值,Nmap可能会采用比所指定的值小的组。这两个参数虽然很少使用, 但都用于保持组的大小在一个指定的范围之内。3.这些选项的主要用途是说明一个最小组的大小,使得整个扫描更加快速。通常选择256来扫描C类网段。对于端口数较多的扫描,超出该值没有意义。对于 端口数较少的扫描,2048或更大的组大小是有帮助的。

--min-parallelism <milliseconds>; --max-parallelism <milliseconds> (调整探测报文的并行度)

这些选项控制用于主机组的探测报文数量,可用于端口扫描和主机发现。默认状态下,Nmap基于网络性能计算一个理想的并行度,这个值经常改变。如果报文被丢弃, Nmap降低速度,探测报文数量减少。随着网络性能的改善,理想的探测报文数量会缓慢增加。这些选项确定这个变量的大小范围。默认状态下,当网络不可靠时,理想的并行度值 可能为1,在好的条件下,可能会增长至几百。最常见的应用是--min-parallelism值大于1,以加快 性能不佳的主机或网络的扫描。这个选项具有风险,如果过高则影响准确度,同时也会降低Nmap基于网络条件动态控制并行度的能力。这个值设为10较为合适, 这个值的调整往往作为最后的手段。

--max-parallelism选项通常设为1,以防止Nmap在同一时间 向主机发送多个探测报文,和选择--scan-delay同时使用非常有用。

--min-rtt-timeout <milliseconds>, --max-rtt-timeout <milliseconds>, --initial-rtt-timeout<milliseconds> (调整探测报文超时)

Nmap使用一个运行超时值来确定等待探测报文响应的时间,随后会放弃或重新 发送探测报文。Nmap基于上一个探测报文的响应时间来计算超时值,如果网络延迟比较显著 和不定,这个超时值会增加几秒。初始值的比较保守(高),而当Nmap扫描无响应 的主机时,这个保守值会保持一段时间。这些选项以毫秒为单位,采用小的--max-rtt-timeout值,使 --initial-rtt-timeout值大于默认值可以明显减少扫描时间,特别 是对不能ping通的扫描(-P0)以及具有严格过滤的网络。如果使用太 小的值,使得很多探测报文超时从而重新发送,而此时可能响应消息正在发送,这使得整个扫描的时 间会增加。如果所有的主机都在本地网络,对于--max-rtt-timeout值来 说,100毫秒比较合适。如果存在路由,首先使用ICMP ping工具ping主机,或使用其 它报文工具如hpings,可以更好地穿透防火墙。查看大约10个包的最大往返时间,然后将 --initial-rtt-timeout设成这个时间的2倍,--max-rtt-timeout 可设成这个时间值的3倍或4倍。通常,不管ping的时间是多少,最大的rtt值不得小于100ms, 不能超过1000ms。--min-rtt-timeout这个选项很少使用,当网络不可靠时, Nmap的默认值也显得过于强烈,这时这个选项可起作用。当网络看起来不可靠时,Nmap仅将 超时时间降至最小值,这个情况是不正常的,需要向nmap-dev邮件列表报告bug。

--host-timeout <milliseconds> (放弃低速目标主机)

由于性能较差或不可靠的网络硬件或软件、带宽限制、严格的防火墙等原因, 一些主机需要很长的时间扫描。这些极少数的主机扫描往往占 据了大部分的扫描时间。因此,最好的办法是减少时间消耗并且忽略这些主机,使用 --host-timeout选项来说明等待的时间(毫秒)。通常使用1800000 来保证Nmap不会在单个主机上使用超过半小时的时间。需要注意的是,Nmap在这半小时中可以 同时扫描其它主机,因此并不是完全放弃扫描。超时的主机被忽略,因此也没有针对该主机的 端口表、操作系统检测或版本检测结果的输出。

--scan-delay <milliseconds>; --max-scan-delay <milliseconds> (调整探测报文的时间间隔)

这个选项用于Nmap控制针对一个主机发送探测报文的等待时间(毫秒),在带宽 控制的情况下这个选项非常有效。Solaris主机在响应UDP扫描探测报文报文时,每秒 只发送一个ICMP消息,因此Nmap发送的很多数探测报文是浪费的。--scan-delay 设为1000,使Nmap低速运行。Nmap尝试检测带宽控制并相应地调整扫描的延迟,但 并不影响明确说明何种速度工作最佳。--scan-delay的另一个用途是躲闭基于阈值的入侵检测和预防 系统(IDS/IPS)。

-T <Paranoid|Sneaky|Polite|Normal|Aggressive|Insane> (设置时间模板)

上述优化时间控制选项的功能很强大也很有效,但有些用户会被迷惑。此外, 往往选择合适参数的时间超过了所需优化的扫描时间。因此,Nmap提供了一些简单的 方法,使用6个时间模板,使用时采用-T选项及数字(0 - 5) 或名称。模板名称有paranoid (0)、sneaky (1)、polite (2)、normal(3)、 aggressive (4)和insane (5)。前两种模式用于IDS躲避,Polite模式降低了扫描 速度以使用更少的带宽和目标主机资源。默认模式为Normal,因此-T3 实际上是未做任何优化。Aggressive模式假设用户具有合适及可靠的网络从而加速 扫描。Insane模式假设用户具有特别快的网络或者愿意为获得速度而牺牲准确性。用户可以根据自己的需要选择不同的模板,由Nmap负责选择实际的时间值。 模板也会针对其它的优化控制选项进行速度微调。例如,-T4 针对TCP端口禁止动态扫描延迟超过10ms,-T5对应的值为5ms。 模板可以和优化调整控制选项组合使用,但模板必须首先指定,否则模板的标准值 会覆盖用户指定的值。建议在扫描可靠的网络时使用 -T4,即使 在自己要增加优化控制选项时也使用(在命令行的开始),从而从这些额外的较小的优化 中获益。如果用于有足够的带宽或以太网连接,仍然建议使用-T4选项。 有些用户喜欢-T5选项,但这个过于强烈。有时用户考虑到避免使主机 崩溃或者希望更礼貌一些会采用-T2选项。他们并没意识到-T Polite选项是如何的慢,这种模式的扫描比默认方式实际上要多花10倍的时间。默认时间 选项(-T3)很少有主机崩溃和带宽问题,比较适合于谨慎的用户。不进行 版本检测比进行时间调整能更有效地解决这些问题。虽然-T0和-T1选项可能有助于避免IDS告警,但在进行上千个主机或端口扫描时,会显著增加时间。对于这种长时间的扫描,宁可设定确切的时间值,而不要去依赖封装的-T0和-T1选项。T0选项的主要影响是对于连续扫描,在一个时间只能扫描一个端口, 每个探测报文的发送间隔为5分钟。T1和T2选项比较类似, 探测报文间隔分别为15秒和0.4秒。T3是Nmap的默认选项,包含了并行扫描。 T4选项与 --max-rtt-timeout 1250 --initial-rtt-timeout 500 等价,最大TCP扫描延迟为10ms。T5等价于 --max-rtt-timeout 300 --min-rtt-timeout 50 --initial-rtt-timeout 250 --host-timeout 900000,最大TCP扫描延迟为5ms。

--max-retries <次数>

没有响应后的重试次数

--script-timeout <time> (设置脚本超时时间)

预防脚本的bug导致影响效率

--min-rate <number>; --max-rate <number> (发包速度控制)

最少每秒发多少,最多每秒发多少。如果0.1的话就是10秒一个包的意思

--defeat-rst-ratelimit

忽略系统reset包的速率限制

--defeat-icmp-ratelimit

忽略系统ICMP错误消息速率限制

--nsock-engine epoll|kqueue|poll|select

选择系统IO模型,nmap -V可以查看支持哪些

九、防火墙绕过/IDS躲避

-f (报文分段); --mtu (使用指定的MTU)

1.-f选项要求扫描时(包挺ping扫描)使用小的IP包分段。其思路是将TCP头分段在几个包中,使得包过滤器、IDS以及其它工具的检测更加困难。必须小心使用这个选项,有些系统在处理这些小包时存在问题,例如旧的网络嗅探器Sniffit在接收到第一个分段时会立刻出现分段错误。该选项使用一次,Nmap在IP头后将包分成8个字节或更小。因此,一个20字节的TCP头会被分成3个包,其中2个包分别有TCP头的8个字节,另1个包有TCP头的剩下4个字节。当然,每个包都有一个IP头。再次使用-f可使用 16字节的分段(减少分段数量)。2.使用--mtu选项可 以自定义偏移的大小,使用时不需要-f,偏移量必须是8的倍数。包过滤器和防火墙对所有的IP分段排队,如Linux核心中的 CONFIG-IP-ALWAYS-DEFRAG配置项,分段包不会直接使用。一些网络无法 承受这样所带来的性能冲击,会将这个配置禁止。其它禁止的原因有分段 包会通过不同的路由进入网络。一些源系统在内核中对发送的报文进行分段,使用iptables连接跟踪模块的Linux就是一个例子。当使用类似Ethereal的嗅探器时,扫描必须保证发送的报文要分段。如果主机操作系统会产生问题,尝试使用--send-eth选项以避开IP层而直接发送原始的以太网帧。

-D <肉鸡1 ,肉鸡2,...>(结合肉鸡干扰进行扫描)首先必须让目标主机认为是肉鸡在扫描它,IDS虽然能够捕捉到扫描的IP,但是并知道哪个是真实的攻击者,使用逗号来分隔每个肉鸡,如果使用了ME选项,nmap将不会使用本机地址,否则nmap将会把本机地址放在一个随机位置。注意,太多的欺骗包甚至可能造成DDoS的效果,而且很多多IPS会过滤欺骗包

-S <IP地址>(源地址欺骗)

伪造扫描请求源地址。在某些情况下,Nmap可能无法确定你的源地址(如果这样,Nmap会给出 提示)。此时,使用-S选项并说明所需发送包的接口IP地址。-e选项常在这种情况下使用,也可采用-P0选项。

-e <interface>(指定使用的网络接口)

告诉nmap使用哪个网络接口收发报文

--source-port <portnumber>; -g <portnumber> (源端口欺骗)

只需要提供一个端口号,Nmap就可以从这些 端口发送数据。为使特定的操作系统正常工作,Nmap必须使用不同的端口号。 DNS请求会忽略--source-port选项,这是因为Nmap依靠系 统库来处理。大部分TCP扫描,包括SYN扫描,可以完全支持这些选项,UDP扫 描同样如此。

--date <hex string>

可以用这样的格式指定值 --data 0xdeadbeef --data \xCA\xFE\x09如果指定0x00ff 这个的数字,将不会做字节序转换。确保你的字节序,对方可以接受

--data-string <string>

例如,--data-string "Scan conducted by Security Ops, extension 7192" or --data-string "Ph34r my l33t skills"

--data-length <number> (发送报文时 附加随机数据)

这个选项告诉Nmap在发送的报文上 附加指定数量的随机字节。操作系统检测(-O)包不受影响。

--ip-options <S|R [route]|L [route]|T|U ... >; --ip-options <hex string> (Send packets with specified ip options)

指定IP头

--proxies <Comma-separated list of proxy URLs>

设置代理,支持http代理和socks4代理

--badsum(让nmap使用一个伪造的不合法的checksum)

这样的数据包一般都会丢弃,如果收到任何回复,这个回复一定来自防火墙

--adler32(使用弃用的Adler32来代替CRC32C做SCTP的checksum)

这是为了从旧版的SCTP协议设备获得响应

--ttl <value> (设置IP time-to-live域)

设置IPv4报文的time-to-live域为指定的值。

--randomize-hosts (对目标主机的顺序随机排列)

告诉Nmap在扫描主机前对每个组中的主机随机排列,最多可达 8096个主机。

--spoof-mac <mac address,prefix,or vendor name> (MAC地址哄骗)

要求Nmap在发送原以太网帧时使用指定的MAC地址,这个选项隐含了 --send-eth选项,以保证Nmap真正发送以太网包。MAC地址有几 种格式。如果简单地使用字符串“0”,Nmap选择一个完全随机的MAC 地址。如果给定的字符品是一个16进制偶数(使用:分隔),Nmap将使用这个MAC地址。 如果是小于12的16进制数字,Nmap会随机填充剩下的6个字节。如果参数不是0或16进 制字符串,Nmap将通过nmap-mac-prefixes查找 厂商的名称(大小写区分),如果找到匹配,Nmap将使用厂商的OUI(3字节前缀),然后 随机填充剩余的3个节字。正确的--spoof-mac参数有, Apple, 0,01:02:03:04:05:06, deadbeefcafe,0020F2, 和Cisco。

十、输出

-oN <filespec> (标准输出)

将结果输入制定文件

-oX <filespec> (XML输出)

将XML输出写入指定文件

-oS <filespec> (ScRipT KIdd|3 oUTpuT)

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

-oG <filespec> (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和版本信息。对于XML输出,本手册无法列举所有的格式,有关Nmap Grep输出的更详细信息可 查阅http://www.unspecific.com/nmap-oG-output。

-oA <basename> (输出至所有格式)

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

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

-d [level](设置调试级别)

--packet-trace(跟踪发出的报文)

-iflist(列举端口和路由)

--append-out(在输出文件住追加)

但对于XML(-oX)扫描输出 文件无效,无法正常解析,需要手工修改。

--resume <filename> (继续中断的扫描)

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

--stylesheet <path or URL> (设置XSL样式表,转换XML输出)

--webxml

--stylesheet https://nmap.org/svn/docs/nmap.xsl 的简写。

--no-stylesheet (忽略XML声明的XSL样式表)

--open

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

--stats-every <time>(周期性的输出统计数据)

--stats-every 10s 每10秒输出一次,,这个输出会被输出到标准输出,和XML文件

--reason(打印主机和端口状态的原因)

十一、其他选项

-6(启用IPv6扫描)

-A(强力扫描模式)

个选项启用了操作系统检测(-O) 和版本扫描(-sV),以后会增加更多的功能。 目的是启用一个全面的扫描选项集合,不需要用户记忆大量的 选项。这个选项仅仅启用功能,不包含用于可能所需要的 时间选项(如-T4)或细节选项(-v)。

--datadir <文件夹名称> (说明nmap用户数据文件的位置)

Nmap在运行时从文件中获得特殊的数据,这些文件有 nmap-service-probes, nmap-services, nmap-protocols, nmap-rpc, nmap-mac-prefixes和 nmap-os-fingerprints。Nmap首先 在--datadir选项说明的目录中查找这些文件。 未找到的文件,将在BMAPDIR环境变量说明的目录中查找。 接下来是用于真正和有效UID的~/.nmap 或Nmap可执行代码的位置(仅Win32);然后是是编译位置, 如/usr/local/share/nmap 或/usr/share/nmap。 Nmap查找的最后一个位置是当前目录。

--send-ip (在原IP层发送)

要求Nmap通过原IP套接字发送报文,而不是低层的以 太网帧。这是--send-eth选项的补充。

--send-eth

使用raw ethernet包来发包

--privileged (假定用户具有全部权限)

告诉Nmap假定其具有足够的权限进行源套接字包发送、 报文捕获和类似UNIX系统中根用户操作的权限。默认状态下, 如果由getuid()请求的类似操作不为0,Nmap将退出。 --privileged在具有Linux内核性能的类似 系统中使用非常有效,这些系统配置允许非特权用户可以进行 原报文扫描。需要明确的是,在其它选项之前使用这些需要权 限的选项(SYN扫描、操作系统检测等)。Nmap-PRIVILEGED变量 设置等价于--privileged选项。

--unprivileged(假定用户没有特权)

--interactive (在交互模式中启动)

在交互模式中启动Nmap,提供交互式的Nmap提示,便于 进行多个扫描(同步或后台方式)。对于从多用户系统中扫描 的用户非常有效,这些用户常需要测试他们的安全性,但不希望 系统中的其它用户知道他们扫描哪些系统。使用--interactive 激活这种方式,然后输入h可 获得帮助信息。由于需要对正确的shell程序和整个功能非常熟悉, 这个选项很少使用。这个选项包含了一个!操作符,用于执行shell命令, 这是不安装Nmap setuid root的多个原因之一。

--release-memory (退出后namp自己释放内存)

--servicedb <services file>

nmap-service文件的路径

--versiondb <service probes file>

nmap-service-probes文件路径

-V;--version (查看版本)

-h;--help(简要的使用介绍)

十二、NSE脚本引擎

https://nmap.org/nsedoc/ 具体脚本的使用手册

--script <脚本名>

脚本名字前面加 + 会让脚本强制执行指定名字的时候可以使用shell风格的通配符"*"。

nmap --script "http-*"

加载所有的名字以http-开头的脚本,必须用引号包起来,让通配符不受shell影响。

nmap --script "not intrusive"

加载所有非入侵类型的脚本

nmap --script "default or safe"

在功能上等同于nmap --script "default,safe"加载了所有默认类或者安全类,或者是两者都包含的。

nmap --script "default and safe"

加载在同属于两者的脚本

nmap --script "(default or safe or intrusive) and not http-*"

加载属于默认类或者安全类或者入侵类的但是名字开头不是http-的脚本

--script-args <n1>=<v1>,<n2>={<n3>=<v3>},<n4>={<v4>,<v5>}

指定脚本参数,里面不能有‘{’, ‘}’, ‘=’, or ‘,’,如果要用就用\转义

--script-args-file <filename>

从一个文件获取脚本参数

--script-trace

打印出脚本执行的具体信息

--script-updatedb

更新脚本库

备注:本文转自《信安之路》hl0rey的分享。

时间: 2024-10-07 22:55:01

nmap使用指南的相关文章

Nmap参考指南中文版

Nmap参考指南中文版 来源: http://www.nmap.com.cn/doc/manual.shtm 译注 该Nmap参考指南中文版由Fei Yang <[email protected]>和Lei Li<[email protected]> 从英文版本翻译而来. 我们希望这将使全世界使用中文的人们更了解Nmap,但我们不能保证该译本和官方的 英文版本一样完整,也不能保证同步更新. 它可以在Creative Commons Attribution License下被修改并重

Nmap使用指南(1)

Nmap是一款开源免费的网络发现(Network Discovery)和安全审计(Security Auditing)工具.软件名字Nmap是Network Mapper的简称.Nmap最初是由Fyodor在1997年开始创建的.随后在开源社区众多的志愿者参与下,该工具逐渐成为最为流行安全必备工具之 一.最新版的Nmap6.0在2012年5月21日发布,详情请参见:www.nmap.org. 端口扫描: 常见端口与对应服务: 80 http 443 https 53 dns 25 smtp 22

Nmap 使用指南

Namp的英文全称是“Network Mapper”,Namp可用来快速扫描大型网络或是单个主机 nmap主要包括四个方面  主机发现.端口扫描.应用与版本侦测.操作系统侦测 主机发现原理:主机发现的原理与ping命令类似,发送探测包到目标主机,如果收到回复,那么就说明目标主机是开启的 主机发现的用法 端口扫描的原理:1.TCP SYN scanning 2.TCP connect scanning 3.TCP ACK scanning 4.TCP FIN/Xmas/NULL scanning

Nmap参考指南(Man Page)

Table of Contents 描述 译注 选项概要 目标说明 主机发现 端口扫描基础 端口扫描技术 端口说明和扫描顺序 服务和版本探测 操作系统探测 时间和性能 防火墙/IDS躲避和哄骗 输出 其它选项 运行时的交互 实例 Bugs 作者 法律事项(版权.许可证.担保(缺).出口限制) Unofficial Translation Disclaimer / 非官方翻译声明 Name nmap — 网络探测工具和安全/端口扫描器 Synopsis nmap [ <扫描类型> ...] [ 

nmap 使用总结

nmap 网络探测工具 参考链接: https://nmap.org/man/zh/ http://www.360doc.com/content/18/0127/18/52402560_725574428.shtml 0X00 背景 nmap是测试中常用的网络探测工具,但是这回简单的操作,一直了解不深入,现在深入的了解和学习一下. 在文章结构上,我把平时常用的内容提前了,以便再次查阅的时候,比较方便. 0X01 安装 nmap可以到http://nmap.org/download.html 下载

【编程书籍 大系】 计算机开放电子书汇总

计算机开放电子书汇总 站点 站点源码 100个gcc小技巧 在线阅读 PDF格式 EPUB格式 MOBI格式 100个gdb小技巧 在线阅读 PDF格式 EPUB格式 MOBI格式 关于浏览器和网络的 20 项须知 在线阅读 PDF格式 EPUB格式 MOBI格式 2015互联网企业校招笔试题 MEGA下载 Github下载 3周3页面 在线阅读 PDF格式 EPUB格式 MOBI格式 简明 Python 教程 在线阅读 PDF格式 EPUB格式 A Guide to HTML5 and CSS

Nmap脚本引擎原理

Nmap脚本引擎原理 一.NSE介绍 虽然Nmap内嵌的服务于版本探测已足够强大,但是在某些情况下我们需要多伦次的交互才能够探测到服务器的信息,这时候就需要自己编写NSE插件实现这个功能.NSE插件能够完成网络发现.复杂版本探测.脆弱性探测.简单漏洞利用等功能. 转载请注明出处:http://www.cnblogs.com/liun1994/ 在文章   "Nmap脚本文件分析(AMQP协议为例)"   中会将版本探测,NSE脚本原理联系起来,具体分析Nmap探测的执行过程. 在文章 

Nmap扫描原理与用法

Nmap扫描原理与用法 2012年6月16日 1     Nmap介绍 Nmap扫描原理与用法PDF:下载地址 Nmap是一款开源免费的网络发现(Network Discovery)和安全审计(Security Auditing)工具.软件名字Nmap是Network Mapper的简称.Nmap最初是由Fyodor在1997年开始创建的.随后在开源社区众多的志愿者参与下,该工具逐渐成为最为流行安全必备工具之一.最新版的Nmap6.0在2012年5月21日发布,详情请参见:www.nmap.or

Linux系统如何安装设置Nmap工具

本文是关于如何在企业环境中使用Nmap安全工具的系列应用指南的第三讲. Linux是运行Nmap工具软件最常用的平台.事实上,大多数Linux发布版都包含Nmap,尽管Nmap也许不是默认安装的.即使你的系统已经有了一个Nmap软件,你还应该考虑升级到最新的版本,下载的网址是:http://www.insecure.org/nmap/download.html(注:并非所有的Nmap发布版都有一种特殊的Nmap计划签名密钥.这个密钥可以从这个网站获得:http://www.insecure.or