本文作者:hl0rey
首发:微信公众号【信安之路】
-iL <文件名>
主机名或者 ip 地址列表列表中的项可以是 Nmap 在命令行上接受的任何格式( IP 地址,主机名,CIDR,IPv6,或者八位字节范围)。 每一项必须以一个或多个空格,制表符或换行符分开。 如果您希望 Nmap 从标准输入而不是实际文件读取列表, 您可以用一个连字符 (-) 作为文件名。
-iR <数量>
随机选择一定数量的目标
--exclude <主机名/地址>
不包含的主机
--excludefile <文件名>
不包含的主机的列表
如果没有给出主机发现的选项,Nmap 就发送一个 TCP ACK 报文到 80 端口和一个 ICMP 回声请求到每台目标机器。
一个例外是ARP扫描用于局域网上的任何目标机器。对于非特权 UNIX shell 用户,使用 connect() 系统调用会发送一个 SYN 报文而不是 ACK 这些默认行为和使用 -PA -PE 选项的效果相同。
另外要注意的是即使您指定了其它 -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)
-PA<端口列表>(TCP ACK Ping)
-PU <端口列表>(UDP Ping)
-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)
-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 扫描 )
-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 )
-sO(IP协议扫描)
IP 协议扫描可以让您确定目标机支持哪些 IP 协议 ( TCP,ICMP,IGMP,等等 ) 。从技术上说,这不是端口扫描 ,既然它遍历的是 IP 协议号而不是 TCP 或者 UDP 端口号。 但是它仍使用 -p 选项选择要扫描的协议号, 用正常的端口表格式报告结果,甚至用和真正的端口扫描一样 的扫描引擎。因此它和端口扫描非常接近,也被放在这里讨论。
-b <ftp relay host>(FTP弹跳扫描)
默认情况下,Nmap 用指定的协议对端口 1 到 1024 以及 nmap-services 文件中列出的更高的端口在扫描。
-p < 端口号,端口列表 >
--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(版本扫描时,不排除任何端口)
--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> (调整并行扫描组的大小)
--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 可以查看支持哪些
-f ( 报文分段 ); --mtu ( 使用指定的MTU )
-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输出的更详细信息可 查阅fb3K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4g2F1M7%4m8W2j5$3W2X3K9h3y4Q4x3X3g2U0L8$3#2Q4x3V1k6F1L8h3q4H3i4K6u0V1L8@1N6Q4x3X3c8G2N6i4c8H3N6i4b7`.
。
-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 cdbK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6F1L8h3q4H3i4K6u0W2L8%4u0Y4i4K6u0r3M7%4k6F1i4K6u0r3k6r3!0U0M7#2)9J5c8X3&6E0j5i4m8Q4x3X3g2^5M7$3H3`. 的简写。
--no-stylesheet (忽略 XML 声明的 XSL 样式表)
--open
只显示开放或者可能开放的端口
--stats-every <time>(周期性的输出统计数据)
--stats-every 10s 每 10 秒输出一次,这个输出会被输出到标准输出,和 XML 文件
--reason(打印主机和端口状态的原因)
-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(简要的使用介绍)
f89K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6F1L8h3q4H3i4K6u0W2L8%4u0Y4i4K6u0r3L8Y4y4W2k6r3!0U0i4K6u0r3
具体脚本的使用手册
--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
更新脚本库
[培训]科锐逆向工程师培训第53期2025年7月8日开班!