[root@hahazhu bin]# ./nmap -help
Nmap 3.70 Usage: nmap [Scan Type(s)] [Options] <host or net list>
Some Common Scan Types ('*' options require root privileges)
* -sS TCP SYN stealth port scan (default if privileged (root))
TCP同步扫描(TCP SYN):因为不必全部打开一个TCP连接,所以这项技术通常称为半
开扫描(half-open)。你可以发出一个TCP同步包(SYN),然后等待回应。如果对方返回
SYN|ACK(响应)包就表示目标端口正在监听;如果返回RST数据包,就表示目标端口没有
监听程序;如果收到一个SYN|ACK包,源主机就会马上发出一个RST(复位)数据包断开和
目标主机的连接,这实际上有我们的操作系统内核自动完成的。这项技术最大的好处是
,很少有系统能够把这记入系统日志。不过,你需要root权限来定制SYN数据包。
-sT TCP connect() port scan (default for unprivileged users)
TCP connect()扫描:这是最基本的TCP扫描方式。connect()是一种系统调用,由操
作系统提供,用来打开一个连接。如果目标端口有程序监听,connect()就会成功返回
,否则这个端口是不可达的。这项技术最大的优点是,你勿需root权限。任何UNIX用户
都可以自由使用这个系统调用。这种扫描很容易被检测到,在目标主机的日志中会记录
大批的连接请求以及错误信息。
* -sU UDP port scan
UDP扫描:如果你想知道在某台主机上提供哪些UDP(用户数据报协议,RFC76服务,可
以使用这种扫描方法。nmap首先向目标主机的每个端口发出一个0字节的UDP包,如果我
们收到端口不可达的ICMP消息,端口就是关闭的,否则我们就假设它是打开的。
有些人可能会想UDP扫描是没有什么意思的。但是,我经常会想到最近出现的
solaris rpcbind缺陷。rpcbind隐藏在一个未公开的UDP端口上,这个端口号大于32770
。所以即使端口111(portmap的众所周知端口号)被防火墙阻塞有关系。但是你能发现大
于30000的哪个端口上有程序正在监听吗?使用UDP扫描就能!cDc Back Orifice的后门
程序就隐藏在Windows主机的一个可配置的UDP端口中。不考虑一些通常的安全缺陷,一
些服务例如:snmp、tftp、NFS使用UDP协议。不幸的是,UDP扫描有时非常缓慢,因为大
多数主机限制ICMP错误信息的比例(在RFC1812中的建议)。例如,在Linux内核中(在
net/ipv4/icmp.h文件中)限制每4秒钟只能出现80条目标不可达的ICMP消息,如果超过
这个比例,就会给1/4秒钟的处罚。solaris的限制更加严格,每秒钟只允许出现大约2
条ICMP不可达消息,这样,使扫描更加缓慢。nmap会检测这个限制的比例,减缓发送速
度,而不是发送大量的将被目标主机丢弃的无用数据包。
不过Micro$oft忽略了RFC1812的这个建议,不对这个比例做任何的限制。所以我们
可以能够快速扫描运行Win95/NT的主机上的所有65K个端口。
-sP ping scan (Find any reachable machines)
ping扫描:有时你只是想知道此时网络上哪些主机正在运行。通过向你指定的网络内的
每个IP地址发送ICMP echo请求数据包,nmap就可以完成这项任务。如果主机正在运行
就会作出响应。不幸的是,一些站点例如:microsoft.com阻塞ICMP echo请求数据包。
然而,在默认的情况下nmap也能够向80端口发送TCP ack包,如果你收到一个RST包,就
表示主机正在运行。nmap使用的第三种技术是:发送一个SYN包,然后等待一个RST或者
SYN/ACK包。对于非root用户,nmap使用connect()方法。
在默认的情况下(root用户),nmap并行使用ICMP和ACK技术。
注意,nmap在任何情况下都会进行ping扫描,只有目标主机处于运行状态,才会进
行后续的扫描。如果你只是想知道目标主机是否运行,而不想进行其它扫描,才会用到
这个选项。
* -sF,-sX,-sN Stealth FIN, Xmas, or Null scan (experts only)
秘密FIN数据包扫描、圣诞树(Xmas Tree)、空(Null)扫描模式:即使SYN扫描都无法
确定的情况下使用。一些防火墙和包过滤软件能够对发送到被限制端口的SYN数据包进
行监视,而且有些程序比如synlogger和courtney能够检测那些扫描。这些高级的扫描
方式可以逃过这些干扰。这些扫描方式的理论依据是:关闭的端口需要对你的探测包回
应RST包,而打开的端口必需忽略有问题的包(参考RFC 793第64页)。FIN扫描使用暴露
的FIN数据包来探测,而圣诞树扫描打开数据包的FIN、URG和PUSH标志。不幸的是,微
软决定完全忽略这个标准,另起炉灶。所以这种扫描方式对Windows95/NT无效。不过,
从另外的角度讲,可以使用这种方式来分别两种不同的平台。如果使用这种扫描方式可
以发现打开的端口,你就可以确定目标注意运行的不是Windows系统。如果使用-sF、-
sX或者-sN扫描显示所有的端口都是关闭的,而使用SYN扫描显示有打开的端口,你可以
确定目标主机可能运行的是Windwos系统。现在这种方式没有什么太大的用处,因为
nmap有内嵌的操作系统检测功能。还有其它几个系统使用和windows同样的处理方式,
包括Cisco、BSDI、HP/UX、MYS、IRIX。在应该抛弃数据包时,以上这些系统都会从打
开的端口发出复位数据包。
-sV Version scan probes open ports determining service & app
names/versions
探测应用程序服务名称和端口号
-sR RPC scan (use with other scan types)
RPC扫描。这种方法和nmap的其它不同的端口扫描方法结合使用。选择所有处于打开
状态的端口向它们发出SunRPC程序的NULL命令,以确定它们是否是RPC端口,如果是,
就确定是哪种软件及其版本号。因此你能够获得防火墙的一些信息。诱饵扫描现在还不
能和RPC扫描结合使用。
Some Common Options (none are required, most can be combined):
* -O Use TCP/IP fingerprinting to guess remote operating system
这个选项激活对TCP/IP指纹特征(fingerprinting)的扫描,获得远程主机的标志。
换句话说,nmap使用一些技术检测目标主机操作系统网络协议栈的特征。nmap使用这些
信息建立远程主机的指纹特征,把它和已知的操作系统指纹特征数据库做比较,就可以
知道目标主机操作系统的类型。
-p <range> ports to scan. Example range: 1-1024,1080,6666,31337
这个选项让你选择要进行扫描的端口号的范围。例如,-p 23表示:只扫描目标主机
的23号端口。-p 20-30,139,60000-表示:扫描20到30号端口,139号端口以及所有大于
60000的端口。在默认情况下,nmap扫描从1到1024号以及nmap-services文件(如果使用
RPM软件包,一般在/usr/share/nmap/目录中)中定义的端口列表。
-F Only scans ports listed in nmap-services
快速扫描模式,只扫描在nmap-services文件中列出的端口。显然比扫描所有65535个端
口要快
-v Verbose. Its use is recommended. Use twice for greater effect.
冗余模式。强烈推荐使用这个选项,它会给出扫描过程中的详细信息。使用这个选项,
你可以得到事半功倍的效果。使用-d选项可以得到更加详细的信息。
-P0 Don't ping hosts (needed to scan www.microsoft.com and others)
在扫描之前,不必ping主机。有些网络的防火墙不允许ICMP echo请求穿过,使用这个
选项可以对这些网络进行扫描。microsoft.com就是一个例子,因此在扫描这个站点时
,你应该一直使用-P0或者-PT80选项(没有空格)。
* -Ddecoy_host1,decoy2[,...] Hide scan using many decoys
-6 scans via IPv6 rather than IPv4
-T <Paranoid|Sneaky|Polite|Normal|Aggressive|Insane> General timing policy
-n/-R Never do DNS resolution/Always resolve [default: sometimes resolve]
-oN/-oX/-oG <logfile> Output normal/XML/grepable scan logs to <logfile>
把扫描结果重定向到一个可读的文件logfilename中。
-iL <inputfile> Get targets from file; Use '-' for stdin
从inputfilename文件中读取扫描的目标。在这个文件中要有一个主机或者网络的列
表,由空格键、制表键或者回车键作为分割符。如果使用-iL -,nmap就会从标准输入
stdin读取主机名字。你可以从指定目标一节得到更加详细的信息。
* -S <your_IP>/-e <devicename> Specify source address or network interface
--interactive Go into interactive mode (then press h for help)
Example: nmap -v -sS -O www.my.com 192.168.0.0/16 '192.88-90.*.*'
SEE THE MAN PAGE FOR MANY MORE OPTIONS, DESCRIPTIONS, AND EXAMPLES