NAME
       nmap - Network exploration tool and security scanner

 

# 注释 :nmap 是网络探测工具和安全扫描工具

 

namp 的 official 站点 :http://insecure.org/nmap

 

SYNOPSIS
       nmap [Scan Type(s)] [Options] <host or net #1 ... [#N]>

 

# 注释 :nmap 的语法比较简单 :

 

#     -)1、关键字 nmap

 

#     -)2、指定一个扫描类型

 

#     -)3、指定扫描选项

 

#     -)4、指定要扫描的主机或者网络

 

DESCRIPTION
       Nmap  is designed to allow system administrators and curious individu-
       als to scan large networks to determine which hosts are up  and  what
       services  they are offering.  nmap supports a large number of scanning
       techniques such as: UDP, TCP connect(), TCP SYN (half open), ftp proxy
       (bounce attack),  ICMP (ping  sweep), FIN, ACK sweep, Xmas Tree, SYN
       sweep, IP Protocol, and Null scan.  See the  Scan  Types  section  for
       more  details.  nmap also offers a number of advanced features such as
       remote OS  detection  via  TCP/IP  fingerprinting,  stealth  scanning,
       dynamic delay  and  retransmission  calculations,  parallel scanning,
       detection of down hosts via parallel pings, decoy scanning, port  fil-
       tering  detection, direct (non-portmapper) RPC scanning, fragmentation
       scanning, and flexible target and port specification.

 

# 注释 :nmap 是用于允许系统管理员来扫描大型网络,以探测有那些主机是 up 的,

 

# 它们上面都提供了什么服务。nmap 支持很多扫描技术 :UDP、TCP 连接、TCP SYN (half open)、

 

# ftp 代理(bounce attack)、IMCP (ping sweep)、FIN,ACK sweep、Xmas Tree、SYN sweep 、

 

# IP 协议、Null scan 。

 

# 注释 :nmap 同样提供了一系列的高级特性,例如远程操作系统探测(通过 TCP/IP 指纹)、

 

# stealth scan、动态延迟、重传计算、并行扫描、诱骗扫描、端口过滤检测、

 

# 直接 RPC 扫描、分片扫描、以及灵活的主机/端口扫描 


 

       Significant effort has been put into decent nmap performance for  non-
       root  users.   Unfortunately, many critical kernel interfaces (such as
       raw sockets) require root privileges.  nmap  should  be run  as  root
       whenever possible (not setuid root, of course).

 

# 注释 :尽可能地以 root 身份运行 nmap ,不过 nmap 不是 setUID 程序

 

 

       The  result  of running nmap is usually a list of interesting ports on
       the machine(s) being scanned (if any).  Nmap always gives  the  port’s
       "well  known" service name (if any), number, state, and protocol.  The
       state is either "open", "filtered", or "unfiltered".  Open means  that
       the  target  machine will accept() connections on that port.  Filtered
       means that a firewall, filter, or other network obstacle  is  covering
       the  port  and  preventing  nmap  from determining whether the port is
       open.  Unfiltered means that the port is known by nmap  to  be  closed
       and no firewall/filter seems to be interfering with nmap’s attempts to
       determine this. Unfiltered ports are the common  case  and  are  only
       shown when most of the scanned ports are in the filtered state.

 

# 注释 :运行 nmap 一般会得到目标主机上的端口列表。nmap 会自动识别出 well-known 端口、服务、协议

 

# 以及端口的状态 :open、filtered、unfiltered 。

 

# "open" 意味着目标主机可以在该端口上接受连接。

 

# "filtered" 意味着有一个防火墙存在,它禁止了 nmap 对该端口状态的探测

 

# "unfiltered" 意味着 nmap 知道该端口被关闭,且没有防火墙对 nmap 的行为进行阻止,应该就是真的关闭了。

 

# unfiltered 端口是很常见的状况,只有在被扫描的很多端口都是 filtered 状态时才会被显示

 

 

       Depending  on options used, nmap may also report the following charac-
       teristics of the remote host: OS in use, TCP sequentiality,  usernames
       running the  programs  which  have  bound to each port, the DNS name,
       whether the host is a smurf address, and a few others.

 

# 注释 :根据不同的选项,nmap 会自动报告远程主机的某些属性 :

 

#     -)1、正在使用的操作系统

 

#     -)2、TCP sequentiality

 

#     -)3、运行于每个端口上的程序的用户名

 

#     -)4、DNS 名称

 

OPTIONS
       Options that make sense together  can  generally  be  combined.  Some
       options are  specific to certain scan modes.  nmap tries to catch and
       warn the user about psychotic or unsupported option combinations.

 

       If you are impatient, you can skip to the examples section at the end,
       which demonstrates common usage.  You can also run nmap -h for a quick
       reference page listing all the options.

 

# 注释 :你可以执行 nmap -h 打印一个快速的参考用法

 

 

SCAN TYPES

 

# 注释 :下面的选项都是用于指定扫描选项的

 

       -sS    TCP SYN scan: This technique is often  referred  to  as  "half-
       open"  scanning, because you don’t open a full TCP connection.
       You send a SYN packet, as if you are going to open a real  con-
       nection  and  you  wait for a response. A SYN|ACK indicates the
       port is listening. A RST is indicative of a non-listener.  If a
       SYN|ACK is received, a RST is immediately sent to tear down the
       connection (actually our OS kernel does this for us). The  pri-
       mary  advantage  to this scanning technique is that fewer sites
       will log it.  Unfortunately you need root privileges  to build
       these  custom  SYN  packets.  This is the default scan type for
       privileged users.

 

# 注释 :-sS 指定采用 "TCP SYN scan" 的扫描模式。这个技术也常被称为 "half open scan" 。

 

# 因为该方法并不会打开一个完整的 TCP 连接,你只是发出一个 SYN 包,就象你要打开一个 TCP

 

# 连接一样,然后你就等待  SYN+ACK 包。

 

# 如果收到一个 SYN+ACK 的包,就表明该接口是处于监听的状态; 如果是 RST 则表示处于关闭的状态(inactive)

 

# 一旦收到了 SYN+ACK,nmap 就发送一个 RST 取消这次连接

 

# 这个方法的好处是很多站点不会记录这种类型的尝试,也就是不会留下痕迹。不过你需要有 root 权限才能构造一个 SYN 包

 

# 这也是对于 root 用户来说的默认扫描类型

 


 

       -sT    TCP connect() scan: This is the most basic form  of  TCP scan-
       ning. The connect() system call provided by your operating sys-
       tem is used to open a connection to every interesting  port  on
       the  machine. If the port is listening, connect() will succeed,
       otherwise the port isn’t reachable.  One strong advantage  to
       this  technique  is that you don’t need any special privileges.
       Any user on most UNIX boxes is free to use this call.

 

# 注释 :-sT 是 TCP connect()扫描模式。这是 TCP 扫描中最基本的形式。

 

# connect()系统调用用于打开一个到你想测试的端口的连接。

 

# 假如端口是处于 LISTENING 的状态,connect()会成功,否则表示端口不可达(port unreachable)

 

# 一个很大的好处就是使用这项技术时你不需要是特权用户(例如 root),

 

# 任何普通用户都可以自由使用该扫描模式

 

 

       This sort of scan is easily detectable as target host logs will
       show  a bunch of connection and error messages for the services
       which accept() the connection just to have it immediately shut-
       down.  This is the default scan type for unprivileged users.

 

# 注释 :这类扫描很容易被检测到并被目标主机检测到。

 

# 因为在日志中将会看到有很多的 inbound 的连接,而在服务接受连接后,又立刻中断连接

 

# 这是非特权用户的默认扫描模式

 

 

       -sF -sX -sN
       Stealth  FIN,  Xmas  Tree,  or Null scan modes: There are times
       when even SYN scanning isn’t clandestine enough. Some firewalls
       and packet filters watch for SYNs to restricted ports, and pro-
       grams like Synlogger and Courtney are available to detect these
       scans.  These advanced scans, on the other hand, may be able to
       pass through unmolested.

 

# 注释 :-sF,-sX,-sN 分别代表 Stealth FIN、Xmas Tree、Null scan 这三种模式。

 

# 有些情况即使使用 SYN 扫描也不够隐秘,某些防火墙会持续监控那些到受限端口的 SYN 连接。

 

# 还有一些象 synlogger 或者 Courtney 的工具可以检测出这些扫描(-sS)

 

# 而 Stealth FIN、Xmas Tree、Null scan 可能可以骗过这些检测工具

 

 

       The idea is that closed ports are required  to  reply  to  your
       probe  packet  with  an  RST,  while open ports must ignore the
       packets in question (see RFC 793 pp 64). The FIN scan  uses  a
       bare  (surprise) FIN  packet as the probe, while the Xmas tree
       scan turns on the FIN, URG, and  PUSH  flags.   The  Null  scan
       turns  off  all  flags. Unfortunately  Microsoft (like usual)
       decided to completely ignore the standard and do things their
       own  way.   Thus this  scan type will not work against systems
       running Windows95/NT.  On the positive side, this is a good way
       to  distinguish  between the two platforms.  If the scan finds
       open ports, you know the machine is not a Windows  box. If  a
       -sF,-sX,or  -sN  scan  shows  all ports closed, yet a SYN (-sS)
       scan shows ports being opened, you are probably  looking at  a
       Windows  box.   This is less useful now that nmap has proper OS
       detection built in.  There are also a few  other systems  that
       are  broken  in  the  same way Windows is.  They include Cisco,
       BSDI, HP/UX, MVS, and IRIX.  All of the above send resets  from
       the open ports when they should just drop the packet.

 

# 注释 :想法是 : 一个端口如果是被关闭的状态,则它需要对你的探测返回一个 RST 包。

 

# 而那些处于 open 状态的端口,应该忽略你的探测包,也就是直接 DROP 掉。

 

# 所以 Stealth FIN 就是 nmap 发送一个 FIN 包作为探测,而 Xmas Tree scan 则是使用 FIN、URG、PUSH

 

# 至于 Null scan 则关闭所有标记(什么标记都不设置)。

 

# 不幸的是,微软完全并不遵照标准,而是以它们的方式行事

 

# 所以这类型的扫描对于 Win95/NT 来说不其作用。

 

# 不过从另外一个角度来说,这也可以用于区分目标主机的操作系统类型是否为 Windows

 

#     -)1、如果扫描可以找到 open 的端口,则可以确定目标主机不是 Windows 主机

 

#     -)2、如果扫描显示所有端口都是关闭的状态,则可能目标主机是一台 Windows 主机

 

# 不过现在 nmap 已经有了 OS 探测功能,所以这个功能没有太大用途。

 

# 也有一些操作系统的行为和 windows 类似,包括 Cisco、HP/UX、IRIX 等。

 


# 补充 :TCP flags 中的 8 个控制位的含义 :

 

CWR – Congestion Window Reduced (CWR) flag is set by the sending host to indicate that it received a TCP segment with the ECE flag set (added to header by RFC 3168). 
ECE (ECN-Echo) – indicate that the TCP peer is ECN capable during 3-way handshake (added to header by RFC 3168). 
URG – indicates that the URGent pointer field is significant                            # 注释 :表示这是一个紧急连接
ACK – indicates that the ACKnowledgement field is significant                        # 注释 :响应包
PSH – Push function                                                                                    # 注释 :PUSH 功能
RST – Reset the connection                                                                         # 注释 :重置
SYN – Synchronize sequence numbers 
FIN – No more data from sender

 

       -sP    Ping scanning: Sometimes you only want to know which hosts on a
       network are up.  Nmap can do this by sending ICMP echo  request
       packets to every IP address on the networks you specify. Hosts
       that  respond  are  up. Unfortunately, some  sites  such  as
       microsoft.com  block  echo request packets.  Thus nmap can also
       send a TCP ack packet to (by default) port 80.  If  we  get  an
       RST back, that machine is up.  A third technique involves send-
       ing a SYN packet and waiting for a RST or a SYN/ACK.  For  non-
       root users, a connect() method is used.

 

# 注释 :-sP 代表 Ping scanning 模式。有时候你只是想知道目标主机是否处于运行状态。

 

# Nmap 通过发送 ICMP ECHO_REQUEST 包到你指定的每台主机上来扫描

 

# 不过很多站点都屏蔽了 ICMP ECHO_REQUEST ,所以 nmap 允许发送一个 TCP ack 包到 80 端口,

 

# 如果收到一个 RST 包,则表明机器是 up 的状态,否则它也不会返回 RST 包了

 


       By  default  (for  root users), nmap uses both the ICMP and ACK
       techniques in parallel.  You can change the -P option described
       later.

 

# 注释 :对于 root 用户来说,nmap 默认同时使用 ICMP 和 ACK ,

 


       Note  that  pinging  is  done by default anyway, and only hosts
       that respond are scanned.  Only use this option if you wish  to
       ping sweep without doing any actual port scans.

 

# 注释 :要注意,ping 是在什么情况下都会做的,只有回应的主机才会被扫描

 

# 所以该功能实际上不能做什么

 

       -sV    Version  detection:  Afer  TCP  and/or UDP ports are discovered
       using one of the other scan methods, version detection communi-
       cates  with those ports to try and determine more about what is
       actually running.  A file called nmap-service-probes is used to
       determine  the  best  probes for detecting various services and
       the match strings to expect.  Nmap tries to determine the  ser-
       vice  protocol  (e.g.  ftp, ssh, telnet, http), the application
       name (e.g. ISC Bind, Apache httpd, Solaris telnetd),  the  ver-
       sion  number,  and sometimes miscellaneous details like whether
       an X server is open to connections or  the  SSH  protocol  ver-
       sion).  If Nmap was compiled with OpenSSL support, it will con-
       nect to SSL servers to deduce the service listening behind  the
       encryption.   When  RPC  services  are discovered, the Nmap RPC
       grinder is used to determine the RPC program and version  num-
       bers.   Some  UDP  ports are left in the "open|filtered" state
       after a UDP scan is unable to determine  whether the  port  is
       open  or filtered.   Version  detection will  try to elicit a
       response from these ports (just as it does  with open  ports),
       and change the state to open if it succeeds. Note that the Nmap
       -A option also enables this feature.  For a much more  detailed
       description  of  Nmap  service  detection,  read our  paper at
       http://www.insecure.org/nmap/versionscan.html  .  There is  a
       related  --version_trace option which causes Nmap to print out
       extensive debugging info about what version scanning  is doing
       (this is a subset of what you would get with --packet_trace).

 

# 注释 :-sV 是 version 探测模式。它在端口状态探测后尝试做更多的探测。

 

# 例如上面都运行有那些服务?服务的进程名是什么?版本是多少?

 

# 还会探测其他有用的信息,例如是否启动了 X Window server ?

 

# 如果 Nmap 在编译时加入了 OpenSSL 支持,它还会尝试连接到 SSL 服务器

 

# 来推导出在 SSL 后面有那些隐藏的服务。

 

# Nmap 还可以探测 RPC 服务,例如 NFS 服务

 

# 注释 :不过 -sV 可能会导致某些 UDP 端口的状态是 "open|filtered" ,表示 nmap 无法判断是什么状态

 


       -sU    UDP  scans:  This  method  is used to determine which UDP (User
       Datagram Protocol, RFC 768) ports are  open  on  a  host.   The
       technique  is  to  send  0 byte UDP packets to each port on the
       target machine.  If we receive an ICMP  port  unreachable  mes-
       sage,  then  the port is closed. If a UDP response is received
       to the probe (unusual),  the  port  is  open.   If  we  get  no
       response at all, the state is "open|filtered", meaning that the
       port is either open or packet filters are blocking the communi-
       cation. Versions scan (-sV) can be used to help differentiate
       the truly open ports from the filtered ones.

 

# 注释 :-sU 表示 UDP scan 模式。它用于探测一台主机上有那些 UDP 端口是处于打开的状态。

 

# 该模式发送一个 0 字节的 UDP 包到目标主机的每个端口。

 

# 假如收到一个 ICMP port-unreachable 消息,则表示端口是关闭的状态。

 

# 如果收到一个响应,则表示是打开的状态。

 

# 这时使用 -sV 可以帮助你区分该端口是 open 还是被过滤的状态

 

 

       Some people think UDP scanning is pointless. I  usually  remind
       them  of the Solaris rpcbind hole. Rpcbind can be found hiding
       on an undocumented  UDP  port  somewhere above  32770.  So  it
       doesn’t matter that 111 is blocked by the firewall. But can you
       find which of the more than 30,000 high ports it is  listening
       on?  With  a  UDP  scanner you can!  There is also the cDc Back
       Orifice backdoor program which hides on a configurable UDP port
       on Windows machines.  Not to mention the many commonly vulnera-
       ble services that utilize UDP such as snmp, tftp, NFS, etc.

 

# 注释 :某些人认为 UDP scanning 没有什么用。但实际上它可以用于发现一些

 

# 不被注意的端口,尤其是 RPC 服务打开的 3xxxx 端口、或者 DNS 服务的 query 端口。

 

# 使用 UDP scanning 你可以发现这些被忽略的端口

 


       Unfortunately UDP scanning is sometimes  painfully  slow since
       most hosts implement a suggestion in RFC 1812 (section 4.3.2.8)
       of limiting the ICMP error  message  rate.   For example,  the
       Linux  kernel  (in net/ipv4/icmp.h) limits destination unreach-
       able message generation to 80 per 4 seconds, with a 1/4  second
       penalty if that is exceeded.  Solaris has much more strict lim-
       its (about 2 messages per second) and thus takes even longer to
       scan.   nmap  detects this rate limiting and slows down accord-
       ingly, rather than flood the network with useless packets  that
       will be ignored by the target machine.

 

# 注释 :不幸的是,UDP scanning 有时候会非常慢,

 

# 因为大部分主机都会按照 RFC 1812 标准,用于自动抑制 ICMP 消息的发送速率

 

# 例如 linux 内核会限制 ICMP destination unreachable 消息的速率为 80个/4秒,也就是1秒最多 20个。

 

# 而 Solaris 则更加严格了,每秒最多2个。

 

# 所以 UDP scanning 有时会很长时间

 

# 补充 :操作系统那里可以配置 ICMP 的发送速率

 

# linux 下允许配置的速率有 :

 

#     -)1、icmp_destunreach_rate

 

#     -)2、icmp_echoreply_rate

 

#     -)3、icmp_paramprob_rate

 

#     -)4、icmp_timeexceed_rate

 

 

       As  is typical, Microsoft ignored the suggestion of the RFC and
       does not seem to do any rate limiting at all on  Win95  and  NT
       machines.   Thus we can scan all 65K ports of a Windows machine
       very quickly.  Whoop!

 

# 注释 :不过 Win95/NT 不做该限制。所以在 windows 主机上可以非常快的扫描完 65535 个 UDP 端口

 


       -sO    IP protocol scans: This method is used to  determine  which  IP
       protocols  are  supported  on a host.  The technique is to send
       raw IP packets without any  further  protocol  header  to  each
       specified  protocol  on  the  target machine.  If we receive an
       ICMP protocol unreachable message, then the protocol is not  in
       use.   Otherwise we  assume  it is open.  Note that some hosts
       (AIX, HP-UX, Digital UNIX) and firewalls may not send  protocol
       unreachable  messages.   This  causes  all  of the protocols to
       appear "open".

 

# 注释 :-sO 是 "IP Protocol scan" 的含义。这个方法是用于判断目标主机上使用的是什么协议。

 


# 注释 :由于 -sO 也是依赖于 ICMP protocol unreachable 消息,所以也会收到 ICMP 消息速率限制的影响。

 

# 注释 :由于某些操作系统不返回 ICMP protocol unreachable ,所以可能造成探测错误

 

       Because the implemented technique is very similar to  UDP  port
       scanning,  ICMP rate limit might apply too. But the IP protocol
       field has only 8 bits, so at most 256 protocols can  be  probed
       which should be possible in reasonable time anyway.

 

# 注释 :由于 ip 包的 protocol 字段有8bit,所以最多可以探测 256 种协议

 

       -sI <zombie host[:probeport]>
       Idlescan:  This  advanced  scan method allows for a truly blind
       TCP port scan of the target (meaning no packets are sent to the
       target  from  your  real IP address).  Instead, a unique side-
       channel  attack  exploits  predictable  "IP  fragmentation  ID"
       sequence generation  on the  zombie host to glean information
       about the open ports on the target.  IDS systems will  display
       the  scan  as coming from the zombie machine you specify (which
       must be up and meet certain criteria).   I  wrote  an  informal
       paper about   this   technique    at    http://www.insecure.org/nmap/idlescan.html .

 

# 注释 :-sI 也叫 Idle scan 。这个高级扫描模式允许对目标主机的完全透明的 TCP 端口扫描。

 

# 也就是说不会有任何来自你的真正 ip 的包被发送到目标主机。

 

    Besides  being  extraordinarily  stealthy  (due  to  its blind

       nature), this  scan  type  permits  mapping out IP-based trust
       relationships between machines.  The port  listing  shows  open
       ports  from the perspective of the zombie host.  So you can try
       scanning a target using various zombies that you think might be
       trusted  (via  router/packet  filter rules).  Obviously this is
       crucial information when prioritizing attack  targets.   Other-
       wise, you penetration testers might have to expend considerable
       resources "owning" an intermediate system,  only to  find  out
       that  its  IP isn’t even trusted by the target host/network you
       are ultimately after.

 

       You can add a colon followed by a port number if you  wish  to
       probe  a particular  port on the zombie host for IPID changes.
       Otherwise Nmap will use the port it uses by  default  for  "tcp
       pings".

 

       -sA    ACK scan: This advanced method is usually used to map out fire-
       wall rulesets.  In particular, it can help determine whether  a
       firewall is stateful or just a simple packet filter that blocks
       incoming SYN packets.

 

    # 注释 :-sA 表示 ACK scan 。主要是用于映射出防火墙的规则集。

 

    # 也就是说,它可以帮助以判断是防火墙的原因还是只是 SYN 包被阻挡了而已

 

       This scan  type  sends  an  ACK  packet  (with  random  looking
       acknowledgment/sequence  numbers) to the ports specified.  If a
       RST comes back, the ports is classified  as  "unfiltered".   If
       nothing comes back (or if an ICMP unreachable is returned), the
       port is classified  as  "filtered".   Note  that nmap  usually
       doesn’t  print "unfiltered" ports, so getting no ports shown in
       the output is usually a sign that all the  probes  got  through
       (and  returned RSTs). This scan will obviously never show ports
       in the "open" state.

 

    # 注释 :这个类型的扫描会发送一个 ACK 包(带有随机的  ack/seq 编号) 到指定端口,

 

    # 假如返回一个 RST ,则端口被认为是 "unfiltered" 。

 

    # 假如什么都不返回(或者返回一个 ICMP 不可达消息),则认为是 "filter"

 

    # 注释 :要注意,nmap 通常不打印 “filtered" 状态的端口。所以返回的结果都是那些通过的端口(返回 RST )

 

    # 这个扫描永远不会出现处于 open 状态的端口

   


 

       -sW    Window scan: This advanced scan is  very similar  to  the  ACK
       scan, except that it can sometimes detect open ports as well as
       filtered/unfiltered due to an anomaly in the  TCP  window  size
       reporting  by  some  operating  systems. Systems vulnerable to
       this include at least some versions of AIX, Amiga, BeOS, BSDI,
       Cray, Tru64 UNIX, DG/UX, OpenVMS, Digital UNIX, FreeBSD, HP-UX,
       OS/2, IRIX, MacOS, NetBSD, OpenBSD,  OpenStep,  QNX,  Rhapsody,
       SunOS  4.X,  Ultrix,  VAX,  and  VxWorks.  See the nmap-hackers
       mailing list archive for a full list.

 

    # 注释 :-sW 表示 Window scan 。和它 ACK scan (-sA)很像,但它有时候可以探测

 

    # 出 open 状态的端口,而 -sA 只能探测出 filtered、unfiltered 状态的而已。

 

    # 主要是由于 -sW 发送的 ACK 包中有异常的 window size 值。

 

    # 受次探测类型影响的有很多。

 


       -sR    RPC scan.  This method works in combination  with  the  various
       port  scan  methods  of  Nmap.   It takes all the TCP/UDP ports
       found open and then floods them with SunRPC program  NULL  com-
       mands  in  an  attempt to determine whether they are RPC ports,
       and if so, what program and version number they serve up.  Thus
       you  can effectively obtain the same info as "rpcinfo -p" even
       if the target’s portmapper is behind a firewall  (or  protected
       by  TCP wrappers).  Decoys do not currently work with RPC scan,
       at some point I may add decoy support for UDP RPC scans.

 

    # 注释 :-sR 表示 RPC Scan 。该方法组合了 nmap 多种端口扫描方法,

 

    # 它找出所有 open 状态的 TCP/UDP 端口,然后用 SunRPC 的 NULL 命令

 

    # 进行测试,看是否它们是一个 RPC 端口。

 

    # 如果是的话,是什么程序运行在上面?版本是多少?

 

    # 所以你可以获得类似于 rpcinfo -p 的输出,即使目标主机在防火墙之后,或者被 Tcpwrapper 所保护

 


       -sL    List scan.  This method simply generates and prints a  list  of
       IP  addresses  or  hostnames  without  actually pinging or port
       scanning them.  DNS name resolution will be  performed  unless
       you use -n.

 

    # 注释 :-sL 表示 List scan 。该方法生成并打印一个 ip 地址/主机名列表

 

    # 但不 ping 或者扫描端口。你可以用 -n 禁止 DNS 解释

 

       -b <ftp relay host>
       FTP bounce attack: An interesting "feature" of the ftp protocol
       (RFC 959) is support for "proxy"  ftp  connections.  In other
       words,  I  should  be  able to connect from evil.com to the FTP
       server of target.com and request that the server send  a  file
       ANYWHERE on  the  Internet!   Now this may have worked well in
       1985 when the RFC was written.  But  in  today’s Internet,  we
       can’t  have  people  hijacking  ftp servers and requesting that
       data be spit out to arbitrary points on the Internet. As *Hob-
       bit*  wrote  back  in  1995, this protocol flaw "can be used to
       post virtually untraceable mail and news, hammer on servers  at
       various  sites, fill up disks, try to hop firewalls, and gener-
       ally be annoying and hard to track down at the same time." What
       we  will exploit  this for is to (surprise, surprise) scan TCP
       ports from a "proxy" ftp server. Thus you could connect  to  an
       ftp server behind a firewall, and then scan ports that are more
       likely to be blocked (139 is a good one).  If  the  ftp  server
       allows  reading  from  and  writing  to some directory (such as
       /incoming), you can send arbitrary data to ports that  you  do
       find open (nmap doesn’t do this for you though).

 

       The  argument  passed to the "b" option is the host you want to
       use as a proxy, in standard URL notation.  The format is: user-
       name:password@server:port.   Everything but server is optional.
       To determine what servers are vulnerable to  this  attack,  you
       can  see my article in Phrack 51.  An updated version is avail-
       able at the nmap URL (http://www.insecure.org/nmap).

 

GENERAL OPTIONS

# 注释 :下面介绍通用选项部分

 

       None of these are required but some can be quite useful.  Note
       that  the  -P  options  can now be combined -- you can increase
       your odds of penetrating strict firewalls by sending many probe
       types using different TCP ports/flags and ICMP codes.

 

# 注释 :下面这些选项都不是必须的,但都很有用。

 

# 要注意,-P 选项现在可以被组合,你可以使用不同的 TCP 端口/标记和 ICMP 消息

 

       -P0    Do  not  try  to ping hosts at all before scanning them.  This
       allows the scanning of networks  that  don’t  allow  ICMP  echo
       requests (or responses) through their firewall. microsoft.com
       is an example of such a network, and thus you should always use
       -P0  or -PS80 when portscanning microsoft.com.  Note tht "ping"
       in this context may involve more than the traditional ICMP echo
       request  packet.  Nmap  supports  many  such probes, including
       arbitrary combinations  of  TCP, UDP,  and  ICMP  probes.   By
       default, Nmap  sends an ICMP echo request and a TCP ACK packet
       to port 80.

 

# 注释 :-P0 表示在扫描主机前不先做 ping 操作。这样对那些不允许 ICMP ECHO_REQUEST

 

# 的主机也会进行扫描。要注意,在这里的 ping 不仅仅指 ICMP ping ,而是指前面的 -sP 操作

 

# 也就是 ICMP ping + 发送到 80 端口的 ACK

 

 

       -PA [portlist]
       Use TCP ACK "ping" to determine what hosts are up.  Instead  of
       sending  ICMP  echo request packets and waiting for a response,
       we spew out TCP ACK packets throughout the target  network  (or
       to  a  single  machine)  and then wait for responses to trickle
       back.  Hosts that are up should respond  with  a  RST.  This
       option preserves the efficiency of only scanning hosts that are
       up while still allowing you to scan networks/hosts  that block
       ping  packets.   For  non root UNIX users, we use connect() and
       thus a SYN is actually being  sent.   To set  the  destination
       ports  of  the  probe packets use -PA<port1>[,port2][...].  The
       default port is 80, since this port is often not filtered  out.
       Note  that  this option now accepts multiple, comma-separated
       port numbers.

 

# 注释 :-PA 表示使用 TCP ACK ping 来判断主机是否 up ,而不是使用 ICMP ping

 

# nmap 发送一个 TCP ACK 包到目的主机/网络,然后等待 RST 包的响应。

 

# 如果收到 RST 包,表示主机是 up 的。

 

# 所以你可以用功能得出那些主机是禁止了 PING 包。对于非 root 用户,nmap 使用 connect()而不是 TCP ACK

 

# 你可以指定目标端口,默认是 80 。因为这个端口一般不会被过滤掉。

 

# 多个端口可以使用逗号进行分隔。

 


       -PS [portlist]
       This option uses SYN (connection request)  packets  instead  of
       ACK  packets  for root users.  Hosts that are up should respond
       with a RST (or, rarely, a SYN|ACK).  You can set the  destina-
       tion ports in the same manner as -PA above.

 

# 注释 :-PS 表示对于 root 用户,使用 SYN (连接请求)来代替 ACK ping

 

# 如果是 up 的主机应该返回一个 RST 或者 SYN+ACK ,你也可以设置端口

 

       -PU [portlist]
       This  option sends UDP probes to the specified hosts, expecting
       an ICMP port unreachable packet (or possibly a UDP response  if
       the  port  is open) if the host is up.  Since many UDP services
       won’t reply to an empty packet, your best bet might be to  send
       this to expected-closed ports rather than open ones.

 

# 注释 :-PU 表示使用 UDP 来探测主机,

 

       -PE    This  option  uses  a true ping (ICMP echo request) packet.  It
       finds hosts that are up  and  also  looks  for  subnet-directed
       broadcast  addresses  on your network.  These are IP addresses
       which are externally reachable and translate to a broadcast  of
       incoming IP packets to a subnet of computers.  These should be
       eliminated if found as they allow for numerous denial  of  ser-
       vice attacks (Smurf is the most common).

 

# 注释 :-PE 表示使用真正的 ping 包 (ICMP ECHO_REQUEST)。、

 

 

       -PP    Uses an ICMP timestamp request (type 13) packet to find listening hosts.

 

# 注释 :-PP 表示使用一个 ICMP timestamp 请求(type=13)来探测

 

 

       -PM    Same as -PE and -PP except uses a netmask  request  (ICMP  type 17).

 

# 注释 :-PM 表示使用 ICMP NETMASK 请求(类型=17)

 

 

       -PB    This  is the  default ping type.  It uses both the ACK ( -PA )
       and ICMP echo request ( -PE ) sweeps in parallel.  This way you
       can  get firewalls that filter either one (but not both).  The
       TCP probe destination port can be set in the  same  manner  as
       with -PA above.  Note that this flag is now deprecated as ping-
       type flags can now be used in combination.  So you  should  use
       both "PE" and "PA" (or rely on the default behavior) to achieve
       this same effect.

 

# 注释 :-PB 是默认的 ping 类型。使用 TCP ACK ping 和 ICMP ping

 

# 现在不建议使用该项,使用 -PE 后者 -PA 更好

 

       -O     This option activates remote  host  identification  via  TCP/IP
       fingerprinting. In other words, it uses a bunch of techniques
       to detect subtleties in the underlying operating system network
       stack of the computers you are scanning. It uses this informa-
       tion to create a "fingerprint"  which  it  compares  with  its
       database of  known  OS  fingerprints (the nmap-os-fingerprints
       file) to decide what type of system you are scanning.

 

# 注释 :-O 选项通过 TCP/IP 指纹激活远程主机的身份认证。

 

# 也就是说,它使用一系列的技术来检测目标主机的操作系统的网络堆栈的信息,

 

# 然后和一些已知的“指纹”数据库比较,得出远程主机的操作系统类型

 

       If Nmap is unable to guess the OS of a machine, and  conditions
       are good (e.g. at least one open port), Nmap will provide a URL
       you can use to submit the fingerprint if you  know  (for sure)
       the OS running on the machine.  By doing this you contribute to
       the pool of operating systems known to nmap and thus it will be
       more  accurate  for  everyone.   Note  that  if you leave an IP
       address on the form, the machine may be scanned when we add the
       fingerprint (to validate that it works).

 

# 注释 :假如 nmap 无法获得一个主机的 OS 类型,但可以探测到一个打开的端口,

 

# 则 nmap 会提供一个 URL ,你可以用它来提交该指纹,前提是你知道目标主机的 OS

 

       The  -O  option  also  enables several other tests.  One is the
       "Uptime" measurement, which uses the TCP timestamp option  (RFC
       1323)  to guess when a machine was last rebooted.  This is only
       reported for machines which provide this information.

 

# 注释 :-O 选项允许其他的测试。其中一个就是 Uptime 的计算,它使用 TCP timestamp 选项

 

# 来猜测一台机器最近一次重启的时间。

 

       Another test enabled by -O is TCP Sequence Predictability Clas-
       sification.  This is a measure that describes approximately how
       hard it is to establish a forged TCP  connection  against  the
       remote  host.   This  is useful for exploiting source-IP based
       trust relationships (rlogin, firewall filters, etc) or for hid-
       ing  the source of an attack.  The actual difficulty number is
       based on statistical sampling and may fluctuate. It is  gener-
       ally  better  to use the English classification such as "worthy
       challenge" or "trivial joke".  This is only reported in  normal
       output with -v.

 

# 注释 :另外一个测试就是 TCP sequence 预测功能。

 

# 这其实是为了伪造 TCP 连接所用的,它可以猜出大概的 TCP 序号

 

# 这对于窃取基于ip信任关系的会话(rlogin、rsh 等)或者隐藏自己的 ip 都有用。

 

# 它并不能百分百的猜对,它是依靠统计和采样来计算的。

 

# 这个只有用 -v 时才会显示

 

    When  verbose mode (-v) is on with -O, IPID Sequence Generation

       is also reported.   Most machines  are  in  the "incremental"
       class, which means that they increment the "ID" field in the IP
       header for each packet they send.  This makes  them  vulnerable
       to several advanced information gathering and spoofing attacks.

 

# 注释 :当 -v 和 -O 一起使用时,IPID sequence Generation 会被报告

 

# 大部分主机是以升序的方式来生成它们所发送的每个 packet 的 ip header 中的ID 域的

 

# 这就造成了有***的可能性

 

       --osscan_limit

       OS detection is far more effective if at least one open and one
       closed  TCP  port are found.  Set this option and Nmap will not
       even try OS detection against hosts that do not meet this  cri-
       teria.   This  can  save substantial time, particularly on -P0
       scans against many hosts.  It only matters when OS detection is
       requested (-O or -A options).

 

# 注释 :如果至少找到一个 open 和 unfiltered 状态的端口,则 os 的探测的效率还是可以的。

 

# --osscan_limit 选项表示如果被探测的主机不符合上面的两个条件就不做 OS 的探测。

 

# 这可以省下不少时间,尤其是在使用 -p0 扫描每个主机时。

 

# 该选项只有在你使用了 -O 或者 -A 时才有意义

 


       -A     This  option  enables  _a_dditional _a_dvanced and _a_ggressive
       options. I haven’t decided exactly which it stands for yet :).
       Presently  this  enables OS Detection (-O) and version scanning
       (-sV).  More features may be added in the future.  The point is
       to  enable  a  comprehensive set of scan options without people
       having to remember a large set  of  flags.   This  option  only
       enables  features, and not timing options (such as -T4) or ver-
       bosity options (-v) that you might wan’t as well.

 

# 注释 :-A 选项允许操作系统检测和 Version scan ,也就是集合了 -O 和 -sV

 


       -6     This options enables IPv6 support.  All targets must be IPv6 if
       this  option  is used, and they can be specified via normal DNS
       name  (AAAA  record)  or as  a  literal IP  address  such  as
       3ffe:501:4819:2000:210:f3ff:fe03:4d0  . Currently,  connect()
       TCP scan and TCP connect() Ping scan  are  supported.   If  you
       need    UDP   or  other  scan types,  have a   look   at
       http://nmap6.sourceforge.net/ .

 

       -f     This option causes the requested SYN, FIN, XMAS, or  NULL  scan
       to use tiny fragmented IP packets.  The idea is to split up the
       TCP header over several packets to make it  harder  for  packet
       filters, intrusion  detection systems, and other annoyances to
       detect what you are doing. Be careful with this! Some  programs
       have  trouble  handling these tiny packets. My favorite sniffer
       segmentation  faulted  immediately  upon receiving  the first
       36-byte  fragment.  After  that comes a 24 byte one! While this
       method won’t get by packet filters and firewalls that queue all
       IP  fragments  (like  the CONFIG_IP_ALWAYS_DEFRAG option in the
       Linux kernel), some networks can’t afford the  performance  hit
       this causes and thus leave it disabled.

 

# 注释 :-f 表示 SYN scan、Stealth FIN、Xmas Tree、Null scan 都是很小的分段的 ip 报文

 

# 这么做主要是不让信息全部集中在一个 packet 中,这样可以逃过防火墙的检测。

 

# 不过要注意,很多的工具都无法检测/处理这些小的报文

 

# 注意,该方法对于那些会暂存报文的防火墙来说是无效的。

 

       Note that I do not yet have this option working on all systems.
       It works fine for my Linux, FreeBSD, and OpenBSD boxes and some
       people have reported success with other *NIX variants.

 

# 注释 :该选项在 linux / FreeBSD、OpenBSD 上可以使用

 

    -v     Verbose mode.  This is a highly recommended option and it gives

       out more information about what is going on.  You  can  use  it
       twice  for  greater effect.  You can also use -d a few times if
       you really want to get crazy with scrolling the screen!

 

# 注释 :-v 表示 verbose 模式。强烈建议使用该选项,不管你在做什么测试。

 

# 你可以使用多次已获得更多的信息。

 

      -h     This handy option display a  quick  reference  screen  of  nmap

       usage  options. As you may have noticed, this man page is not
       exactly a "quick reference" :)

 

# 注释 :-h 显示快速指引

 

       -oN <logfilename>
       This logs the results of your scans in a normal human  readable
       form into the file you specify as an argument.

 

# 注释 :-oN 表示把结果写入一个 human-readable 的文件

 


       -oX <logfilename>
       This  logs  the results of your scans in XML form into the file
       you specify as an argument.  This  allows  programs  to  easily
       capture  and interpret Nmap results.  You can give the argument
       "-" (without quotes) to shoot output  into  stdout  (for shell
       pipelines,  etc).   In  this  case  normal  output will be sup-
       pressed. Watch out for error messages if you  use  this (they
       will  still  go to stderr).  Also note that "-v" may cause some
       extra information to be printed. The Document Type  Definition
       (DTD)  defining  the  XML  output  structure  is available  at
       http://www.insecure.org/nmap/data/nmap.dtd .

 

# 注释 :-oX 表示以 XML 的格式输出结果到一个文件

 

       -oG <logfilename>
       This logs the results of your scans in a grepable form into the
       file  you  specify as an argument.  This simple format provides
       all the information on one line (so you  can  easily  grep  for
       port  or OS  information and see all the IPs.  This used to be
       the preferred mechanism for programs to interact with Nmap, but
       now  we recommend XML output (-oX instead).  This simple format
       may not contain as much information as the other formats.   You
       can give the argument "-" (without quotes) to shoot output into
       stdout (for shell pipelines, etc).  In this case normal  output
       will  be suppressed.   Watch out for error messages if you use
       this (they will still go to stderr).  Also note that "-v"  will
       cause some extra information to be printed.

 

# 注释 :-oG 以适用于 grep 的格式输出到指定文件。每个主机只有1行输出而已

 

# 不过该格式可能有些信息不会被输出

 

# 你可以用 - 作为指定文件名,表示输出到 stdout ,这样原来正常的输出就会被禁止。

 


       -oA <basefilename>
       This  tells  Nmap  to  log  in  ALL  the major formats (normal,
       grepable, and XML).  You give a base for the filename, and  the
       output files will be base.nmap, base.gnmap, and base.xml.

 

# 注释 :-oA 表示以全部的格式记录(normal、xml、grepable)。

 

# 你只需给出一个 basename ,nmap 会自动加上 .nmap , .gnmap , .xml 作为后缀名

 

 

       -oS <logfilename>
       thIs  l0gz  th3  r3suLtS of YouR ScanZ iN a s|<ipT kiDd|3 f0rM
       iNto THe fiL3 U sPecfy 4s an arGuMEnT!  U kAn gIv3 the 4rgument
       "-" (wItHOUt qUOteZ) to sh00t output iNT0 stDouT!@!!

 

 

       --resume <logfilename>
       A  network scan that is canceled due to control-C, network out-
       age, etc. can be resumed using this  option.   The  logfilename
       must  be either a normal (-oN) or grepable (-oG) log from the
       aborted scan.  No other options can be given (they will be  the
       same  as the  aborted  scan).   Nmap will start on the machine
       after the last one successfully scanned in the log file.

 

# 注释 :如果你因为某些原因用 CTRL-C 中断了扫描,你可以用 --resume 来恢复

 

# 不过指定的 log 必须是一个 normal 格式的(-oN)或者 grepable (-oG)文件,且该

 

# 文件是这次意味终止的扫描所输出的日志才可以恢复

 

# nmap 会自动从最后一个成功扫描的机器后开始继续

 


       --exclude <host1 [,host2][,host3],...">
       Specifies a list of targets  (hosts,  ranges,  netblocks)  that
       should  be  excluded  from a scan. Useful to keep from scanning
       yourself, your ISP, particularly sensitive hosts, etc.

 

# 注释 :--exclude 指定一个 target 列表,可以是由主机、ip 范围等组成。

 

# nmap 在扫描时将会跳过它们。

 


       --excludefile <exclude_file>
       Same functionality as the --exclude option, only the  excluded
       targets  are  provided  in  an  newline-delimited  exclude_file
       rather than on the command line.

 

# 注释 :--excludefile 和 --excluce 类似,不过是从文件读取

 

       --append_output
       Tells Nmap to append scan results to any output files you  have
       specified rather than overwriting those files.

 

# 注释 :--append_output 告诉 nmap 把扫描结果“追加”到输出文件

 

# 输出文件由上面的 -oN、-oX、-oG 指定

 


       -iL <inputfilename>
       Reads target specifications from the file specified RATHER than
       from the command line.  The file should contain a list of  host
       or  network expressions separated by spaces, tabs, or newlines.
       Use a hyphen (-) as inputfilename if you want nmap to read host
       expressions  from  stdin (like at the end of a pipe).  See the
       section  target  specification  for  more  information  on  the
       expressions you fill the file with.

 

# 注释 :-iL 表示从指定文件读入要扫描的主机

 

# 可以用空格、tab、newline 作为分行

 

# 也可以用 - 表示从 stdin 读取输入

 

       -iR <num hosts>
       This  option  tells  Nmap  to generate its own hosts to scan by
       simply picking random numbers :).  It will never end after  the
       given  number of IPs has been scanned -- use 0 for a never-end-
       ing scan.  This option can be useful for statistical  sampling
       of  the  Internet  to estimate various things.  If you are ever
       really bored, try nmap -sS -PS80 -iR 0 -p 80 to find  some  web
       servers to look at.

 

       -p <port ranges>
       This option specifies what ports you want to specify. For exam-
       ple "-p 23" will only try port 23 of the target  host(s).   "-p
       20-30,139,60000-"  scans ports between 20 and 30, port 139, and
       all ports greater than 60000.  The default is to scan all ports
       between  1 and 1024 as well as any ports listed in the services
       file which comes with nmap.  For IP  protocol  scanning  (-sO),
       this  specifies  the  protocol  number  you  wish  to  scan for
       (0-255).

 

# 注释 :-p 选项用于指定要扫描的目标端口。你可以指定端口范围,p1-p2。

 

# 也可已指定一个起始值,格式是 p1- 。 多个端口用逗号隔开。

 

# 默认是扫描所有端口(从 1- 1024),还有 /etc/services 文件中列出的所有端口。

 

# 对于 -sO 来说,由于协议位只有 8 bit ,所以只能从 0 -255 而已

 

       When scanning both TCP and UDP ports, you can specify a partic-
       ular  protocol  by  preceding the port numbers by "T:" or "U:".
       The qualifier lasts until you specify another  qualifier.   For
       example, the  argument  "-p  U:53,111,137,T:21-25,80,139,8080"
       would scan UDP ports 53,111,and 137, as well as the listed  TCP
       ports.   Note  that to scan both UDP & TCP, you have to specify
       -sU and at least one TCP scan type (such as -sS, -sF, or -sT).
       If  no  protocol qualifier is given, the port numbers are added
       to all protocol lists.

 

# 注释 :当同时扫描 TCP 和 UDP 端口时,你可以指定一个协议,例如 "T:" 后者 "U:" 。

 

# 它会一直起作用,直到你指定另外一个协议为止。

 

# 例如 -p U:53,111,T:22 表示扫描 UDP 53 和 111 以及 TCP 22 端口。

 

# 注释 :注意,如果要扫描两种协议,必须指定 -sU 和至少一种 TCP 扫描(-sS、-sF、-sT)

 

# 假如没有指定协议类型,则所有协议都会用

 


       -F Fast scan mode.
       Specifies that you only wish to scan for ports  listed  in  the
       services file which comes with nmap (or the protocols file for
       -sO).  This is obviously much faster than  scanning  all 65535
       ports on a host.

 

# 注释 :-F 表示快速扫描模式。表示只扫描 /etc/services 文件中的端口,

 

# 或者 -sO 指定的协议,这当然比扫描 65535 要快多了。

 


       -D <decoy1 [,decoy2][,ME],...>
       Causes  a  decoy scan to be performed which makes it appear to
       the remote host that the host(s) you  specify  as  decoys  are
       scanning the  target network too.  Thus their IDS might report
       5-10 port scans from unique IP addresses, but they  won’t  know
       which  IP  was  scanning them  and which were innocent decoys.
       While  this  can be  defeated  through  router  path  tracing,
       response-dropping,  and other "active" mechanisms, it is gener-
       ally an  extremely  effective  technique for  hiding  your  IP
       address.

 

# 注释 :-D 表示进行 decoy scan 可以对目标主机造成一种假象 : 有很多台主机都在扫描它

 

# 这样目标主机就会无法区分究竟那个是真正的扫描它们的 ip ,

 

# 不过这可以通过路由跟踪来发现最终的 ip

 

# 总而言之,decoy scan 是一种可以很好的隐藏你的 IP  的扫描方式

 


       Separate each  decoy  host with commas, and you can optionally
       use "ME" as one of the decoys to represent  the position  you
       want  your  IP  address to be used.  If you put "ME" in the 6th
       position or later, some common port  scan  detectors  (such  as
       Solar  Designer’s excellent scanlogd) are unlikely to show your
       IP address at all.  If you don’t use "ME", nmap will put you in
       a random position.

 

# 注释 :-D 允许你指定多个主机名,你可以用 'ME' 这个关键字来代表你的 ip

 

# 尽量把 'ME' 放在最后,因为有些检测软件无法列出很多的 ip

 

# 如果没有指定,nmap 将随机的插入到一个位置

 

       Note that the hosts you use as decoys should be up or you might
       accidentally SYN flood your targets.  Also it  will  be  pretty
       easy  to determine which host is scanning if only one is actu-
       ally up on the network.  You might want  to  use IP  addresses
       instead  of names (so the decoy networks don’t see you in their
       nameserver logs).

 

# 注释 :要注意,你用来做 Decoy 的主机应该是 up 状态的,

 

# 否则你可能会导致目标主机受到 SYN Flood ***(由于目标主机不是 up ,导致目标主机一直收不到 ACK ,造成 SYN Flood)

 

# 同样也很从一大堆的 down 状态的主机中找出唯一的 up 主机

 

 

       Also note that some "port scan  detectors"  will firewall/deny
       routing  to hosts that attempt port scans.  The problem is that
       many scan types can be forged (as  this  option  demonstrates).
       So  attackers  can  cause  such a machine to sever connectivity
       with important hosts such as  its  internet  gateway,  DNS  TLD
       servers, sites  like  Windows Update, etc.  Most such software
       offers  whitelist  capabilities, but  you  are unlikely   to
       enumerate  all  of  the  critical machines.  For this reason we
       never recommend taking action against port scans that  can  be
       forged,  including  SYN scans, UDP scans, etc.  The machine you
       block could just be a decoy.

 

 

       Decoys are used both in the initial ping scan (using ICMP, SYN,
       ACK,  or whatever)  and during the actual port scanning phase.
       Decoys are also used during remote OS detection ( -O ).

 

# 注释 :Decoy 同样也用于 ping scan 和真正的端口扫描过程,也用于 -O (OS Scan)

 


       It is worth noting that using too many  decoys  may  slow  your
       scan  and  potentially  even make it less accurate.  Also, some
       ISPs will filter out your spoofed packets, although many (cur-
       rently most) do not restrict spoofed IP packets at all.

 

# 注释 :要注意,使用太多的 decoys 也会降低扫描的速度和精度

 


       -S <IP_Address>
       In  some circumstances, nmap may not be able to determine your
       source address ( nmap will tell you if this is the  case).   In
       this  situation, use -S with your IP address (of the interface
       you wish to send packets through).

 

# 注释 :某些情况下,nmap 无法判断你的ip 地址(这时它会告诉你该情况)

 

# 使用 -S 可以指定你的源 ip

 

       Another possible use of this flag is to spoof the scan to  make
       the  targets think that someone else is scanning them.  Imagine
       a company being repeatedly port scanned by a competitor!  This
       is not a supported usage (or the main purpose) of this flag.  I
       just think it raises an  interesting  possibility  that  people
       should be aware of before they go accusing others of port scan-
       ning them.  -e would generally be required  for  this  sort  of
       usage.

 

       -e <interface>
       Tells nmap what interface to send and receive packets on.  Nmap
       should be able to detect this but it will tell you if  it  can-
       not.

 

# 注释 :-e 告示 nmap 使用什么端口来发送/接收 packets 。

 

       --source_port <portnumber>
       Sets the source port number used in scans.  Many naive firewall
       and packet filter installations  make  an  exception  in their
       ruleset  to  allow  DNS  (53)  or FTP-DATA (20) packets to come
       through and establish a connection.  Obviously this  completely
       subverts the security advantages of the firewall since intrud-
       ers can just masquerade as FTP or DNS by modifying their source
       port.  Obviously for a UDP scan you should try 53 first and TCP
       scans should try 20 before  53. Note  that  this  is  only  a
       request  --  nmap will honor it only if and when it is able to.
       For example, you can’t  do  TCP ISN  sampling  all  from  one
       host:port  to  one  host:port,  so nmap changes the source port
       even if you used this  option. This  is  an  alias  for  the
       shorter, but harder to remember, -g option.

 

# 注释 :--source_port 指定探测包的源端口。有些防火墙会允许从 53 (DNS) 或者 20 (FTP-DATA)

 

# 的源端口的数据进入,所以这个时候你可以用 --source_port 来增加扫描成功的机率。

 

# 显而易见,在做 UDP 扫描时,你应该首先对  53 端口进行测试,而在做 TCP 端口扫描时,首选 20

 

# 不过要注意,这个选项并不是固定起作用,nmap 只是在可能的情况下才会这么做。

 

       Be  aware  that  there  is  a small performance penalty on some
       scans for using this option, because I sometimes store  useful
       information in the source port number.

 

       --data_length <number>
       Normally Nmap  sends  minimalistic packets that only contain a
       header.  So its TCP packets are generally  40  bytes  and  ICMP
       echo  requests  are  just 28.  This option tells Nmap to append
       the given number of random bytes to  most  of  the  packets  it
       sends.   OS  detection  (-O) packets are not affected, but most
       pinging and portscan packets are.  This slows things down,  but
       can be slightly less conspicuous.

 

       -n     Tells  Nmap to NEVER do reverse DNS resolution on the active IP
       addresses it finds.  Since DNS is often  slow,  this  can  help
       speed things up.

 

# 注释 :-n 告诉 nmap 不做 DNS 正向解释,这可以加快扫描的进度

 

       -R     Tells Nmap to ALWAYS do reverse DNS resolution on the target IP
       addresses.  Normally this is only done when a machine is found
       to be alive.

 

# 注释 :-R 表示对目标主机固定做 PTR 解释,找出其主机名。一般只有检测到目标主机是 up 时才做

 


       -r     Tells  Nmap  NOT to  randomize  the  order  in which ports are
       scanned.

 

# 注释 :-r 告诉 nmap 不要随机扫描端口,要按顺序扫描

 

       --ttl <value>
       Sets the IPv4 time to live field in sent packets to  the given
       value.

 

# 注释 :--ttl 设置发出去的扫描包的 TTL

 

       --randomize_hosts
       Tells  Nmap to shuffle each group of up to 2048 hosts before it
       scans them.  This can make the scans less  obvious  to  various
       network monitoring systems, especially when you combine it with
       slow timing options (see below).

 


       -M <max sockets>
       Sets the maximum number of sockets that will be used in  paral-
       lel  for a TCP connect() scan (the default).  This is useful to
       slow down the scan a  little  bit  and  avoid  crashing  remote
       machines.   Another  approach is to use -sS, which is generally
       easier for machines to handle.

 

# 注释 :-M 设置在做 TCP connect()scan 时同时允许使用的最多 sockets 数量。

 

# 它会稍微降低 scan 的速度,并防止远程主机的崩溃。另外一个方式是使用 -sS ,这样对于远程主机来说比较容易接受

 

       --packet_trace
       Tells Nmap to show all the packets it sends and receives in  a
       tcpdump-like  format.   This  can  be  tremendously  useful for
       debugging, and is also a good learning tool.

 

# 注释 :--packet_trace 告诉nmap按照 tcpdump 的格式输出它所发送/接收到的每个 packets

 


       --datadir [directoryname]
       Nmap obtains some special data at runtime in files named nmap-
       services,  nmap-protocols,  nmap-rpc, and nmap-os-fingerprints.
       Nmap first searches these files  in  the directory  option  to
       --nmapdir.   Any files not found there, are searched for in the
       directory specified  by  the  NMAPDIR  environmental  variable.
       Next  comes  ~/nmap,  and  then  a compiled-in location such as
       /usr/share/nmap .  As a last resort, Nmap will look in the cur-
       rent directory.

 

# 注释 :--datadir 指的是 nmap 一些静态数据的存放位置。默认是 /usr/share/nmap

 

# 这些数据包括 nmap-services、nmap-protocols、nmap-rpc、nmap-os-fingerprints

 

# nmap 首先搜索 --datadir 指定的目录,

 

# 其次搜索 NMAPDIR 环境变量指定的目录

 

# 再搜索 ~/nmap 目录

 

# 再搜索 /usr/share/nmap

 

# 如果还不行,最后是当前目录

 

TIMING OPTIONS

       Generally Nmap does a good job at adjusting for Network charac-
       teristics at runtime and scanning as  fast  as  possible while
       minimizing  that chances of hosts/ports going undetected.  How-
       ever, there are same cases where Nmap’s default  timing  policy
       may  not meet your objectives.  The following options provide a
       fine level of control over the scan timing:

 

# 注释 :一般情况下,nmap 在调整网络特性,

 

 

       -T <Paranoid|Sneaky|Polite|Normal|Aggressive|Insane>
       These are canned timing policies for  conveniently  expressing
       your  priorities to  Nmap.  Paranoid mode scans very slowly in
       the hopes of avoiding detection by IDS systems.  It  serializes
       all scans (no parallel scanning) and generally waits at least 5
       minutes between sending packets. Sneaky is similar, except  it
       only waits 15 seconds between sending packets.  Polite is meant
       to ease load on the network and reduce the chances of  crashing
       machines.  It serializes the probes and waits at least 0.4 sec-
       onds between them.  Note that this is  generally at  least  an
       order  of  magnitude  slower than default scans, so only use it
       when you need to.  Normal is the default Nmap  behavior, which
       tries  to  run  as  quickly as possible without overloading the
       network or missing hosts/ports. Aggressive  This  option  can
       make  certain  scans (especially SYN scans against heavily fil-
       tered hosts) much faster.   It  is  recommended  for  impatient
       folks  with a fast net connection.  Insane is only suitable for
       very fast networks or where you don’t mind losing some informa-
       tion.   It  times  out  hosts in 15 minutes and won’t wait more
       than 0.3 seconds for individual probes.  It does allow for very
       quick network sweeps though :).

 

# 注释 :-T 用于控制 nmap 以什么速度探测,从最慢到最快分别是

 

#     -)1、Paranoid

 

#     -)2、Sneaky

 

#     -)3、Polite

 

#     -)4、Normal

 

#     -)5、Aggressive

 

#     -)6、Insane

 

       You  can also  reference  these by number (0-5).  For example,
       "-T0" gives you Paranoid mode and "-T5" is Insane mode.

 

       --host_timeout <milliseconds>
       Specifies the amount of time Nmap is allowed to spend  scanning
       a  single host before giving up on that IP.  The default timing
       mode has no host timeout.

 

# 注释 :--host_timeout 设置 nmap 在一台主机身上所消耗的最长时间,单位是毫秒。默认是无限

 

       --max_rtt_timeout <milliseconds>
       Specifies the maximum amount of time Nmap is  allowed  to  wait
       for  a  probe response before retransmitting or timing out that
       particular probe.  The default mode sets this to about 9000.

 

       --min_rtt_timeout <milliseconds>
       When the target hosts start to establish a pattern of  respond-
       ing very quickly, Nmap will shrink the amount of time given per
       probe.  This speeds up the scan, but can lead to missed packets
       when  a  response takes longer than usual.  With this parameter
       you can guarantee that Nmap will wait at least the given amount
       of time before giving up on a probe.

 

       --initial_rtt_timeout <milliseconds>
       Specifies  the  initial  probe timeout.  This is generally only
       useful when scanning firewalled hosts with -P0.  Normally  Nmap
       can  obtain  good RTT estimates from the ping and the first few
       probes.  The default mode uses 6000.

 

       --max_hostgroup <numhosts>
       Specifies the maximum number of hosts that Nmap is  allowed  to
       scan  in parallel.   Most  of the port scan techniques support
       multi-host operation, which makes them much quicker.  Spreading
       the  load  among multiple target hosts makes the scans gentler.
       The downside is increast results latency.  You need to wait for
       all  hosts in a group to finish, rather than having them pop up
       one by one.  Specify an argument of one for old-style (one host
       at  a  time) Nmap behavior.  Note that the ping scanner handles
       its own grouping, and ignores this value.

 

       --min_hostgroup <milliseconds>
       Specifies the minimum host group size  (see  previous  entry).
       Large  values  (such as 50) are often beneficial for unattended
       scans, though they do take up more memory.  Nmap may  override
       this  preference when it needs to, because a group must all use
       the same network interface, and some scan types can only handle
       one host at a time.

 

       --max_parallelism <number>
       Specifies  the  maximum number of scans Nmap is allowed to per-
       form in parallel.  Setting this to one means  Nmap  will never
       try  to scan more than 1 port at a time. It also effects other
       parallel scans such as ping sweep, RPC scan, etc.

 

       --min_parallelism <number>
       Tells Nmap to scan at least the given number of ports in paral-
       lel.   This can speed up scans against certain firewalled hosts
       by an order of magnitude.   But  be  careful  -- results  will
       become unreliable if you push it too far.

 

       --scan_delay <milliseconds>
       Specifies  the  minimum  amount  of time Nmap must wait between
       probes.  This is mostly useful to reduce network  load  or  to
       slow the scan way down to sneak under IDS thresholds.

 

# 注释 :--scan_delay 用于控制 nmap 在每次探测之间的

 

 

 

TARGET SPECIFICATION
       Everything that isn’t an option (or option argument) in nmap is
       treated as a target host specification.  The simplest  case  is
       listing  single  hostnames or IP addresses on the command line.
       If you want to scan a subnet of IP addresses,  you  can  append
       /mask  to  the  hostname or IP address.  mask must be between 0
       (scan the whole Internet) and 32 (scan the single  host  speci-
       fied).  Use /24 to scan a class "C" address and /16 for a class "B".

 

    # 注释 :任何不被 nmap 所识别的选项都被认为是目标主机的定义

 

    # 你可以一次列出多个主机或者 ip 地址。

 

    # 你可以用 <ip/mask> 的方式来指定子网掩码,mask 值是从 0 - 32

 

       Nmap also has a more powerful notation which lets  you  specify
       an  IP  address  using lists/ranges for each element.  Thus you
       can scan the whole class "B" network 192.168.*.* by  specifying
       "192.168.*.*"  or "192.168.0-255.0-255"   or  even
       "192.168.1-50,51-255.1,2,3,4,5-255".  And of course you can use
       the mask notation: "192.168.0.0/16".  These are all equivalent.
       If you use asterisks ("*"), remember that most  shells  require
       you  to  escape  them  with  back  slashes or protect them with
       quotes.

 

    # 注释 :nmap 也允许你指定一个范围,例如它支持 wildcard ,不过需要用括号括起来。

 

    #     -)1、主机名 :例如 mail.bob.com.

 

    #     -)2、ip/mask :例如 172.17.64.11/24

 

    #     -)3、ip1-ip2 :172.17.64.11-20

 

    #     -)4、wildcard :172.17.*.*

 

    #     -)5、综合 :mail.bob.com,172.17.64.11/24,172.17.64.12-20,30-40,172.17.65.*/24

 

       Another interesting thing to do is slice the Internet the other
       way.   Instead  of  scanning all the hosts in a class "B", scan
       "*.*.5.6-7" to scan every IP address that ends in .5.6 or  .5.7
       Pick  your  own  numbers.   For  more information on specifying
       hosts to scan, see the examples section.

 

    # 注释 ;有一个有趣的例子是 *.*.*.11 ,它可以扫描所有以 11 结尾的 ip

 

EXAMPLES
       Here are some examples of using nmap, from simple and normal to a lit-
       tle  more  complex/esoteric.  Note that actual numbers and some actual
       domain names are used to make things more concrete.   In  their place
       you should substitute addresses/names from your own network.  I do not
       think portscanning other networks is illegal; nor should portscans  be
       construed  by  others  as an attack.  I have scanned hundreds of thou-
       sands of machines and have received only one complaint. But I am  not
       a  lawyer  and  some (anal) people may be annoyed by nmap probes.  Get
       permission first or use at your own risk.

 

       nmap -v target.example.com

 

       This option scans all reserved TCP ports on the machine  target.exam-
       ple.com .  The -v means turn on verbose mode.

 

    # 注释 :上面的命令扫描 target.example.com 主机的 0-1024 端口,以及 /etc/services 中定义的端口

 

    # -v 表示 verbose 模式

 

       nmap -sS -O target.example.com/24

 

       Launches a stealth SYN scan against each machine that is up out of the
       255 machines on class "C" where target.example.com resides.   It  also
       tries  to determine what operating system is running on each host that
       is up and running.  This requires root privileges because of  the  SYN
       scan and the OS detection.

 

    # 注释 :上面的命令对 target.example.com/24 主机所在的 C 网的每个 up 主机进行 SYN scan 以及 OS scan

 

      # 由于使用了 -sS ,所以需要 root 权限

 

       nmap -sX -p 22,53,110,143,4564 198.116.*.1-127

 

       Sends  an Xmas tree scan to the first half of each of the 255 possible
       8 bit subnets in the 198.116 class "B" address space.  We are  testing
       whether the  systems run sshd, DNS, pop3d, imapd, or port 4564.  Note
       that Xmas scan doesn’t work on Microsoft boxes due to their  deficient
       TCP stack.  Same goes with CISCO, IRIX, HP/UX, and BSDI boxes.

 

    # 注释 :上面的命令使用 Xmas Tree scan 对 198.116 的所有以 1-127 结尾的主机进行扫描

 

    # 目的端口是 22,53,110,143,4564 。

 

    # 要注意,Xmas Tree 对 windows 主机不起作用

 

       nmap -v --randomize_hosts -p 80 *.*.2.3-5

 

       Rather  than focus on a specific IP range, it is sometimes interesting
       to slice up the entire Internet and scan  a  small  sample  from  each
       slice. This  command  finds  all  web servers  on  machines with IP
       addresses ending in .2.3, .2.4, or .2.5.  If you are root you might as
       well  add  -sS. Also you will find more interesting machines starting
       at 127. so you might want to use "127-222" instead of the first aster-
       isks  because  that  section  has  a  greater  density  of interesting
       machines (IMHO).

 

    # 注释 :

 

       host -l company.com | cut  -d  -f 4 | ./nmap -v -iL -

 

       Do a DNS zone transfer to find the hosts in company.com and then  feed
       the  IP addresses  to  nmap.  The above commands are for my GNU/Linux
       box.  You may need different commands/options on other operating  sys-
       tems.