Nmap网络安全扫描器说明(3)

/ns/cn/tool/data/20020804014152.htm

Nmap网络安全扫描器说明(3)



作者:作者:Fyodor 译者:quack
发布日期:2002-2-6
上传日期:2002-2-6
来源:不详


常规选项
--------*

这些选项并非必需的,但有些会非常实用。

-P0 在扫描前不尝试或者PING主机,这是用来扫描那些不允许ICMP echo 请求(或应答)的主机。
microsoft.com就是这其中的一个例子,我们就必须使用-P0或者-PT80来察看microsoft.com的端口。

-PT 用TCP的ping来确定主机是否打开。作为替代发送ICMP echo请求包并等待回应的方式,我们可以大量
发送TCP ACK包往目标网络(或者单机)并一点点地等待它的回应,打开的主机会返回一个RST。这一参数
可以让你在ping信息包阻塞时仍能高效率地扫描一个网络/主机。对非root的用户,我们用connect(),以
如下格式设置目标探针-PT<portnumber>,默认的端口是80,因为这相端口往往未被过滤。

-PS 这一选项是root用户使用的,能用SYN(连接请求)包替代ACK包,打开的主机会有一个RST(或者SYN|ACK―
―但比较少见)应答。

-PI 这一选项是使用一个真正的ping(ICMP echo request)包。它找到开放的主机并且将该子网中的广播地
址全数搜寻――该广播地址是能够到达并能正确解析IP包的。如果其会被大量的DoS(denial of service)攻
击时,我们就能找到它。

-PB 默认的ping形式,它用于ACK(-PT)与ICMP(-PI)并行攻击,以这一形式可以通过防火墙或包过滤。

-O 经由TCP/IP获取‘指纹’来判别主机的OS类型,用另一说法,就是用一连串的信息包探测出你所扫描的主
机位于操作系统有关堆栈信息并区分其精细差别,以此判别操作系统。它用搜集到的信息建立一个“指纹”
用来同已知的操作系统的指印相比较(the nmap-os-fingerprints file)
――这样判定操作系统就有了依据。
如果你发现一台机器开了至少一个端口并得到错误的诊断信息,那么你可以写信告诉我相关细节比如操作
系统版本或侦测到的操作系统版本图,如果他有端口开放但nmap返回'不可识别的操作系统',这可能也是
有用的,你可以将它的IP告诉我或者另一个办法是用nmap的-d参数并告诉我它返回的“指印”――操作系统和
版本号,这样做,也算是对nmap在判定操作系统的进一步开发中做了些事情,以便后续版本中它能更精确
地判别系统类型。

-I 这是用ident扫描方式的参数,如Dave Goldsmith于1996年在Bugtraq中所说的,这个ident协议(rfc
1413)允许通过TCP连接得到拥有进程的用户名――即使这个连接不是由该进程发起的。所以呢,举个例吧,
你可以通过ident连接到一个http端口并找出该进程是否由root运行,但这只能在“全开”的对目标端口的
TCP连接中使用(象-sT扫描参数)。当你用-I参数时,远程主机的identd在开放的端口接受连接质询――很
明显的,如果主机不运行identd的话,那它就无法正常工作。

-f 这个参数配置以细小的IP碎片包实现SYN,FIN,XMAS或NULL扫描请求。这个想法是把TCP包头分别放在
几个不同的信息包中,使包过滤器难于运作,而后你就可以闯入系统做你想做的事了。但要注意,部份程
序可能会对这些小信息包处理错误。比方说我最喜欢的sniffer segmentation在接收第一个36字节的信息
碎片时就出现麻烦,之后又来了个24字节的!当包过滤器和能将IP碎片排列的防火墙没有获得此顺序时(
就象linux内核中的CON-FIG_IP_ALWAYS_DEFRAG选项),一些网络系统就不能反映出找到目标,并且放弃。
记住这个参数不一定能很好地工作在任何系统上,它在我的Linux,FreeBSD以及OpenBSD下是正常的,当然也
有一些人说它能在部份不同的*NIX环境下工作。

-v 详细模式。这是被强烈推荐的选项,因为它能带来你想要的更多信息。你可以重复使用它以获得更大效
果。如果你需要大量翻动屏幕请使用 -d 命令两次

-h 这是一个快捷的帮助选项,可以在屏幕上显示nmap的参数使用方法――象你注意到的那样,这个man page
实在不是一个“快速入门参考”:)

-o <logfilename>
这是用来指定一个放置扫描结果的文件的参数――这个结果是易于阅读的。

-m <logfilename>
这也是存放扫描结果的参数,但它是存放机器可解析(machine parseable)结果的,你可以用-m 带'-'(
引号不用)将其输出到标准输出里(用shell的管道符……)。在这种形式下,正常的输出被禁止了,你需要
察看一些错误信息来了解情况。

-i <inputfilename>
从指定文件而不是从命令行读取数据。该文件可以存放一个主机或网络的列表,中间用空格、TAB键或者换
行来分隔。如果希望从标准输入设备(文件)读取――比如在管道符的末端,你要将连字号(-)用于文件名。
你可以从目标规格里找到更多关于写这一文件的资料。

-p <port ranges>
这一参数可以指定你希望扫描的端口,举例来说吧'-p 23'则只会对主机的23端口进行探测,默认扫描的是
从1到1024端口,或者也可以用nmap里带的services file里的端口列表。

-F 快速扫描模式。指定只希望扫描nmap里提供的services file中列出的端口列表里的端口。这明显会比
扫描所有65535个端口来得快。

-D <decoy1 [,decoy2][,ME],...>
这是一种带有诱骗模式的扫描,在远程主机的连接记录里会记下所有你所指定的诱骗性的地址。这样的话
他们的数据存储器会显示有一些端口扫描从某个IP发起,然而他们无法辩别哪个是真正的IP而哪个是用来
作为掩护的,这可以击败一些通过路由进行跟踪的行为,所以它是一项隐藏你的IP的很实用的技术。用逗
号分隔各个欺骗地址,你可以随意地将'me'放进任意一个你希望显示真实IP的地方,如果你将'ME'放在第
六位甚至最后,有些端口扫描记录器(比如Solar Designer's excellent scanlogd)可能根本就不会显示
你的IP,如果你不用'ME'的话,nmap将会将它随机放置。记住你用来诱骗的主机必须是开放的或者你可以
半开扫描一下你的目标。因为要从一堆实际上没有用的IP地址里判别出哪个是真正的入侵者是相当容易的
。你还可能要用IP地址来代替名字,这样诱骗主机的nameserver logs里才不会记录下你来。还要记得有些
(愚蠢的)"端口扫描探测器"会拒绝到达主机的端口扫描尝试。这样你无意中就会导致你扫描的主机与“诱
骗主机”连接的丢失,这样可能会带来一个很大的问题是――如果这个“诱骗主机”是一个网上的网关或者甚至
就是其本地的机子,其连接一样会断开!所以大家最好小心使用这个参数――从道德上的原因――这仅仅是一
个诱骗,不是么?这种诱骗可以用在最初的ping扫描(用ICMP,SYN,ACK或其它)与实际的端口状态扫描中
,它还可以用于远程OS的判别(-O)。当然如果你写入太多的诱骗地址也是没什么用处的,那只能减缓扫描
速度以及降低一些精确度。而且一些指令处理系统还可能会过滤掉你的欺骗包,虽然多数(几乎是全部了
)不会对欺骗包作出任何限制。

-S <IP_Address>
在某些环境下nmap可能无法确定你的源地址――这种情况下nmap会有提示,这时你就要用-S带IP地址来标注
。另一种使用的可能性是用来欺骗目标使它认为某人在扫描它。设想一下,某个公司发现被竞争者持续不
断的扫描:),这是一个不被支持的用法,或者说,不是主要目的。我只是用它来提醒人们在发现一个端口扫
描者时别光顾责难,可能他是无辜的呢。-e能够说明这个参数的一般用法。

-e <interface>
告诉nmap哪个界面要发送或接收。nmap能够自动探测它,如果无法做到,亦会有提示信息。

-g <portnumber>
在扫描中设定源端口号。许多“天真”的防火墙或包过滤器除了它们建立的允许DNS(53)或FTP-DATA(20)的包
进来建立连接之外,其余一概过滤,显然这是很轻率的做法,因为入侵者能够轻易地编辑一个来自FTP或
DNS的源端口。比如说,你如果无法从一个主机的host:port通过TCP ISN取得信息,那么通过用-g 命令,
nmap会改变源端口再次尝试。需要了解的是,使用这个选项可能会有小小的延迟,因为我有时需要在源端
口号中存储有用信息.


-M <max sockets>
设定用来并行进行TCP connect()扫描的最大的sockets数目(默认)。这对将扫描适度减缓是相当有效的
,它可以避免把远程主机crashing。另一个途径是用-sS。