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。