2010-05-15(Sat)

Nmap介绍

1. 什么是Nmap?
  nmap — 网络探测工具和安全/端口扫描器
  在黑客发起攻击前,对目标机的相关信息进行收集是必须的,同样,网络管理员需要随时了解服务器的运行状态,及时发现安全隐患。所以对双方来说,一个好的端口扫描器能够帮助你事半功倍。Nmap就是一个非常出色的扫描器。
  Nmap (“Network Mapper(网络映射器)”) 是一款开放源代码的网络探测和安全审核的工具。它的设计目标是快速地扫描大型网络,当然用它扫描单个主机也没有问题。Nmap以新颖的方式使用原始IP报文来发现网络上有哪些主机,那些主机提供什么服务(应用程序名和版本),那些服务运行在什么操作系统(包括版本信息),它们使用什么类型的报文过滤器/防火墙,以及一堆其它功能。虽然Nmap通常用于安全审核,许多系统管理员和网络管理员也用它来做一些日常的工作,比如查看整个网络的信息,管理服务升级计划,以及监视主机和服务的运行。

2. 一个入侵过程的简单描述
  最近媒体报道了许多关于入侵网络的新闻,使人们总以为入侵者只需通过简单工具就可获得电脑的访问权限。但实际上,事情并不是想象中的这么简单。黑客想要入侵一台电脑,首先要有一套完整的计划。在入侵系统之前,黑客必须先找到一台目标主机,并查出哪些端口在监听之后才能进行入侵。
  找出网络上的主机,测试哪些端口在监听,这些工作通常是由扫描来实现的。扫描网络是黑客进行入侵的第一步。通过使用扫描器(如nmap)扫描网络,寻找存在漏洞的目标主机。一旦发现了有漏洞的目标,接下来就是对监听端口的扫描。nmap通过使用TCP协议栈指纹准确地判断出被扫主机的操作系统类型。

3. 命令格式
  nmap [Scan Type...] [Options] {target specification}
  nmap [ <扫描类型> ...] [ <选项> ] { <扫描目标说明> }

3.1 描述
  Nmap输出的是扫描目标的列表,以及每个目标的补充信息,至于是哪些信息则依赖于所使用的选项。“所感兴趣的端口表格”是其中的关键。那张表列出端口号,协议,服务名称和状态。状态可能是open(开放的),filtered(被过滤的),closed(关闭的),或者unfiltered(未被过滤的)。如果Nmap报告状态组合open|filtered和closed|filtered时,那说明Nmap无法确定该端口处于两个状态中的哪一个状态。当要求进行版本探测时,端口表也可以包含软件的版本信息。当要求进行IP协议扫描时(-sO),Nmap提供关于所支持的IP协议而不是正在监听的端口的信息。
  除了所感兴趣的端口表,Nmap还能提供关于目标机的进一步信息,包括反向域名,操作系统猜测,设备类型,和MAC地址。
  一个典型的Nmap扫描如下所示。
    # nmap -A -T4 192.168.0.0/24
  在这个例子中,唯一的选项是-A,用来进行操作系统及其版本的探测,-T4可以加快执行速度,接着是目标网络IP。

3.2 选项概要
  基于Zenmap内置的几个模板,说明最常用的几个选项。Zenmap的示例在最后列出。

3.3 目标说明
  除了选项,所有出现在Nmap命令行上的都被视为对目标主机的说明。最简单的情况是指定一个目标IP地址或主机名。
  有时候您希望扫描整个网络的相邻主机。为此,Nmap支持CIDR风格的地址。您可以附加一个/在一个IP地址或主机名后面, Nmap将会扫描所有和该参考IP地址具有相同比特的所有IP地址或主机。例如,192.168.10.0/24将会扫描192.168.10.0 (二进制格式: 11000000 10101000 00001010 00000000)和192.168.10.255(二进制格式: 11000000 10101000 00001010 11111111)之间的256台主机。192.168.10.40/24将会做同样的事情。假设主机scanme.nmap.org的IP地址是205.217.153.62, scanme.nmap.org/16 将扫描205.217.0.0和205.217.255.255之间的65,536个IP地址。所允许的最小值是/1,这将会扫描半个互联网。最大值是/32,这将会扫描该主机或IP地址,因为所有的比特都固定了。
  CIDR标志位很简洁但有时候不够灵活。例如,您也许想要扫描192.168.0.0/16,但略过任何以.0或者.255结束的IP地址,因为它们通常是广播地址。Nmap通过八位字节地址范围支持这样的扫描您可以用逗号分开的数字或范围列表为IP地址的每个八位字节指定它的范围。例如,192.168.0-255.1-254 将略过在该范围内以.0和.255结束的地址。 范围不必限于最后的8位:0-255.0-255.13.37将在整个互联网范围内扫描所有以13.37结束的地址。这种大范围的扫描对互联网调查研究也许有用。
  IPv6地址只能用规范的IPv6地址或主机名指定。CIDR和八位字节范围不支持IPv6,因为它们对于IPv6几乎没什么用。
  Nmap命令行接受多个主机说明,它们不必是相同类型。命令nmap scanme.nmap.org 192.168.0.0/8 10.0.0,1,3-7.0-255将和您预期的一样执行。

4. 主机发现(HOST DISCOVERY)
  任何网络探测任务的最初几个步骤之一就是把一组IP范围(有时该范围是巨大的)缩小为一列活动的或者您感兴趣的主机。扫描每个IP的每个端口很慢,通常也没必要。当然,什么样的主机令您感兴趣主要依赖于扫描的目的。网管也许只对运行特定服务的主机感兴趣,而从事安全的人士则可能对一个马桶都感兴趣,只要它有IP地址:-)。一个系统管理员也许仅仅使用Ping来定位内网上的主机,而一个外部入侵测试人员则可能绞尽脑汁用各种方法试图 突破防火墙的封锁。
  由于主机发现的需求五花八门,Nmap提供了一箩筐的选项来定制您的需求。主机发现有时候也叫做ping扫描,但它远远超越用世人皆知的ping工具 发送简单的ICMP回声请求报文。用户完全可以通过使用列表扫描(-sL)或者 通过关闭ping (-P0)跳过ping的步骤,也可以使用多个端口把TPC SYN/ACK,UDP和ICMP 任意组合起来玩一玩。这些探测的目的是获得响应以显示某个IP地址是否是活动的(正在被某 主机或者网络设备使用)。 在许多网络上,在给定的时间,往往只有小部分的IP地址是活动的。 这种情况在基于RFC1918的私有地址空间如10.0.0.0/8尤其普遍。 那个网络有16,000,000个IP,但我见过一些使用它的公司连1000台机器都没有。 主机发现能够找到零星分布于IP地址海洋上的那些机器。
  如果没有给出主机发现的选项,Nmap就发送一个TCP ACK报文到80端口和一个ICMP回声请求到每台目标机器。一个例外是ARP扫描用于局域网上的任何目标机器。对于非特权UNIX shell用户,使用connect()系统调用会发送一个SYN报文而不是ACK,这些默认行为和使用-PA -PE选项的效果相同。扫描局域网时,这种主机发现一般够用了,但是对于安全审核,建议进行 更加全面的探测。
  -P*选项(用于选择ping的类型)可以被结合使用。 您可以通过使用不同的TCP端口/标志位和ICMP码发送许多探测报文 来增加穿透防守严密的防火墙的机会。另外要注意的是即使您指定了其它 -P*选项,ARP发现(-PR) 对于局域网上的 目标而言是默认行为,因为它总是更快更有效。

-sP (Ping扫描)
  该选项告诉Nmap仅仅进行ping扫描(主机发现),然后打印出对扫描做出响应的那些主机。没有进一步的测试(如端口扫描或者操作系统探测)。这比列表扫描更积极,常常用于和列表扫描相同的目的。它可以得到些许目标网络的信息而不被特别注意到。对于攻击者来说,了解多少主机正在运行比列表扫描提供的一列IP和主机名往往更有价值。
  系统管理员往往也很喜欢这个选项。它可以很方便地得出网络上有多少机器正在运行或者监视服务器是否正常运行。常常有人称它为地毯式ping,它比ping广播地址更可靠,因为许多主机对广播请求不响应。
  -sP选项在默认情况下,发送一个ICMP回声请求和一个TCP报文到80端口。如果非特权用户执行,就发送一个SYN报文(用connect()系统调用)到目标机的80端口。当特权用户扫描局域网上的目标机时,会发送ARP请求(-PR),除非使用了--send-ip选项。-sP选项可以和除-P0)之外的任何发现探测类型-P*选项结合使用以达到更大的灵活性。一旦使用了任何探测类型和端口选项,默认的探测(ACK和回应请求)就被覆盖了。 当防守严密的防火墙位于运行Nmap的源主机和目标网络之间时, 推荐使用那些高级选项。否则,当防火墙捕获并丢弃探测包或者响应包时,一些主机就不能被探测到。

-PS [portlist] (TCP SYN Ping)
  该选项发送一个设置了SYN标志位的空TCP报文。 默认目的端口为80(可以通过改变nmap.h)文件中的DEFAULT_TCP_PROBE_PORT值进行配置,但不同的端口也可以作为选项指定。 甚至可以指定一个以逗号分隔的端口列表(如 -PS22,23,25,80,113,1050,35000),在这种情况下,每个端口会被并发地扫描。

-PA [portlist] (TCP ACK Ping)
  TCP ACK ping和刚才讨论的SYN ping相当类似。也许您已经猜到了,区别就是设置TCP的ACK标志位而不是SYN标志位。ACK报文表示确认一个建立连接的尝试,但该连接尚未完全建立。所以远程主机应该总是回应一个RST报文,因为它们并没有发出过连接请求到运行Nmap的机器,如果它们正在运行的话。
  提供SYN和ACK两种ping探测的原因是使通过防火墙的机会尽可能大。

-PU [portlist] (UDP Ping)
  还有一个主机发现的选项是UDP ping,它发送一个空的(除非指定了--data-length UDP报文到给定的端口。端口列表的格式和前面讨论过的-PS和-PA选项还是一样。如果不指定端口,默认是31338。该默认值可以通过在编译时改变nmap.h文件中的 DEFAULT_UDP_PROBE_PORT值进行配置。默认使用这样一个奇怪的端口是因为对开放端口进行这种扫描一般都不受欢迎。
  如果目标机器的端口是关闭的,UDP探测应该马上得到一个ICMP端口无法到达的回应报文。该扫描类型的主要优势是它可以穿越只过滤TCP的防火墙和过滤器。

-PE; -PP; -PM (ICMP Ping Types)
  除了前面讨论的这些不常见的TCP和UDP主机发现类型,Nmap也能发送世人皆知的ping程序所发送的报文。Nmap发送一个ICMP type 8 (回声请求)报文到目标IP地址, 期待从运行的主机得到一个type 0 (回声响应)报文。对于网络探索者而言,不幸的是,许多主机和 防火墙现在封锁这些报文,而不是按期望的那样响应,参见RFC 1122。因此,仅仅ICMP扫描对于互联网上的目标通常是不够的。但对于系统管理员监视一个内部网络,它们可能是实际有效的途径。使用-PE选项打开该回声请求功能。时间戳和地址掩码查询可以分别用-PP和-PM选项发送。

5. 端口扫描基础(PORT SCANNING BASICS)
  虽然Nmap这些年来功能越来越多,它也是从一个高效的端口扫描器开始的,并且那仍然是它的核心功能。nmap 这个简单的命令扫描主机上的超过1660个TCP端口。许多传统的端口扫描器只列出所有端口是开放还是关闭的,Nmap的信息粒度比它们要细得多。它把端口分成六个状态:open(开放的),closed(关闭的),filtered(被过滤的),unfiltered(未被过滤的),open|filtered(开放或者被过滤的),或者closed|filtered(关闭或者未被过滤的)。
  这些状态并非端口本身的性质,而是描述Nmap怎样看待它们。例如,对于同样的目标机器的135/tcp端口,从同网络扫描显示它是开放的,而跨网络作完全相同的扫描则可能显示它是filtered(被过滤的)。
Nmap 所识别的6个端口状态。
 open(开放的)
  应用程序正在该端口接收TCP连接或者UDP报文。发现这一点常常是端口扫描的主要目标。安全意识强的人们知道每个开放的端口都是攻击的入口。攻击者或者入侵测试者想要发现开放的端口。而管理员则试图关闭它们或者用防火墙保护它们以免妨碍了合法用户。非安全扫描可能对开放的端口也感兴趣,因为它们显示了网络上那些服务可供使用。
 closed(关闭的)
  关闭的端口对于Nmap也是可访问的(它接受Nmap的探测报文并作出响应),但没有应用程序在其上监听。它们可以显示该IP地址上(主机发现,或者ping扫描)的主机正在运行,也对部分操作系统探测有所帮助。因为关闭的端口是可访问的,也许过会儿值得再扫描一下,可能一些又开放了。系统管理员可能会考虑用防火墙封锁这样的端口。那样他们就会被显示为被过滤的状态,下面讨论。
 filtered(被过滤的)
  由于包过滤阻止探测报文到达端口,Nmap无法确定该端口是否开放。过滤可能来自专业的防火墙设备,路由器规则或者主机上的软件防火墙。这样的端口让攻击者感觉很挫折,因为它们几乎不提供任何信息。有时候它们响应ICMP错误消息如类型3代码13(无法到达目标:通信被管理员禁止),但更普遍的是过滤器只是丢弃探测帧,不做任何响应。这迫使Nmap重试若干次以访万一探测包是由于网络阻塞丢弃的。这使得扫描速度明显变慢。
 unfiltered(未被过滤的)
  未被过滤状态意味着端口可访问,但Nmap不能确定它是开放还是关闭。 只有用于映射防火墙规则集的ACK扫描才会把端口分类到这种状态。 用其它类型的扫描如窗口扫描,SYN扫描,或者FIN扫描来扫描未被过滤的端口可以帮助确定端口是否开放。
 open|filtered(开放或者被过滤的)
  当无法确定端口是开放还是被过滤的,Namp就把该端口划分成这种状态。开放的端口不响应就是一个例子。没有响应也可能意味着报文过滤器丢弃了探测报文或者它引发的任何响应。因此Nmap无法确定该端口是开放的还是被过滤的。UDP,IP协议,FIN,Null和Xmas扫描可能把端口归入此类。
 closed|filtered(关闭或者被过滤的)
  该状态用于Nmap不能确定端口是关闭的还是被过滤的。它只可能出现在IPID Idle扫描中。

6. 端口扫描技术(PORT SCANNING TECHNIQUES)
  大部分扫描类型只对特权用户可用。这是因为他们发送接收原始报文,这在Unix系统需要root权限。在Windows上推荐使用administrator账户,但是当WinPcap已经被加载到操作系统时,非特权用户也可以正常使用Nmap。当Namp在1997年发布时,需要root权限是一个严重的局限,因为很多用户只有共享的shell账户。现在,世界变了,计算机便宜了,更多人拥有互联网连接,桌面UNIX系统 (包括Linux和MAC OS X)很普遍了。Windows版本的Nmap现在也有了,这使它可以运行在更多的桌面上。由于所有这些原因,用户不再需要用有限的共享shell账户运行Nmap。这是很幸运的,因为特权选项让Nmap强大得多也灵活得多。
  虽然Nmap努力产生正确的结果,但请记住所有结果都是基于目标机器(或者它们前面的防火墙)返回的报文的。这些主机也许是不值得信任的,它们可能响应以迷惑或误导Nmap的报文。更普遍的是非RFC兼容的主机以不正确的方式响应Nmap探测。FIN,Null和Xmas扫描特别容易遇到这个问题。这些是特定扫描类型的问题,因此我们在个别扫描类型里讨论它们。
  这一节讨论Nmap支持的大约十几种扫描技术。一般一次只用一种方法,除了UDP扫描(-sU)可能和任何一种TCP扫描类型结合使用。友情提示一下,端口扫描类型的选项格式是-sC,其中C是个显眼的字符,通常是第一个字符。一个例外是deprecated FTP bounce扫描(-b)。默认情况下,Nmap执行一个SYN扫描,但是如果用户没有权限发送原始报文(在UNIX上需要root权限)或者如果指定的是IPv6目标,Nmap调用connect()。本节列出的扫描中,非特权用户只能执行connect()和ftp bounce扫描。

-sS (TCP SYN扫描)
  SYN扫描作为默认的也是最受欢迎的扫描选项,是有充分理由的。它执行得很快,在一个没有入侵防火墙的快速网络上,每秒钟可以扫描数千个端口。SYN扫描相对来说不张扬,不易被注意到,因为它从来不完成TCP连接。它也不像Fin/Null/Xmas,Maimon和Idle扫描依赖于特定平台,而可以应对任何兼容的TCP协议栈。它还可以明确可靠地区分open(开放的),closed(关闭的),和filtered(被过滤的)状态。
  它常常被称为半开放扫描,因为它不打开一个完全的TCP连接。它发送一个SYN报文,就像您真的要打开一个连接,然后等待响应。 SYN/ACK表示端口在监听(开放),而RST(复位)表示没有监听者。如果数次重发后仍没响应,该端口就被标记为被过滤。如果收到ICMP不可到达错误(类型3,代码1,2,3,9,10,或者13),该端口也被标记为被过滤。

-sT (TCP connect()扫描)
  当SYN扫描不能用时,TCP Connect()扫描就是默认的TCP扫描。当用户没有权限发送原始报文或者扫描IPv6网络时,就是这种情况。Instead of writing raw packets as most other scan types do,Nmap通过创建connect()系统调用要求操作系统和目标机以及端口建立连接,而不像其它扫描类型直接发送原始报文。这是和Web浏览器,P2P客户端以及大多数其它网络应用程序用以建立连接一样的高层系统调用。它是叫做Berkeley Sockets API编程接口的一部分。Nmap用该API获得每个连接尝试的状态信息,而不是读取响应的原始报文。
  当SYN扫描可用时,它通常是更好的选择。因为Nmap对高层的connect()调用比对原始报文控制更少,所以前者效率较低。该系统调用完全连接到开放的目标端口而不是像SYN扫描进行半开放的复位。这不仅花更长时间,需要更多报文得到同样信息,目标机也更可能记录下连接。IDS(入侵检测系统)可以捕获两者,但大部分机器没有这样的警报系统。当Nmap连接,然后不发送数据又关闭连接,许多普通UNIX系统上的服务会在syslog留下记录,有时候是一条加密的错误消息。此时,有些真正可怜的服务会崩溃,虽然这不常发生。如果管理员在日志里看到来自同一系统的一堆连接尝试,她应该知道她的系统被扫描了。

-sU (UDP扫描)
  虽然互联网上很多流行的服务运行在TCP协议上,UDP服务也不少。DNS,SNMP,和DHCP(注册的端口是53,161/162,和67/68)是最常见的三个。因为UDP扫描一般较慢,比TCP更困难,一些安全审核人员忽略这些端口。这是一个错误,因为可探测的UDP服务相当普遍,攻击者当然不会忽略整个协议。所幸,Nmap可以帮助记录并报告UDP端口。
  UDP扫描用-sU选项激活。它可以和TCP扫描如SYN扫描(-sS)结合使用来同时检查两种协议。
  UDP扫描发送空的(没有数据)UDP报头到每个目标端口。如果返回ICMP端口不可到达错误(类型3,代码3),该端口是closed(关闭的)。其它ICMP不可到达错误(类型3,代码1,2,9,10,或者13)表明该端口是filtered(被过滤的)。偶尔地,某服务会响应一个UDP报文,证明该端口是open(开放的)。如果几次重试后还没有响应,该端口就被认为是open|filtered(开放|被过滤的)。这意味着该端口可能是开放的,也可能包过滤器正在封锁通信。可以用版本扫描(-sV)帮助区分真正的开放端口和被过滤的端口。
  UDP扫描的巨大挑战是怎样使它更快速。开放的和被过滤的端口很少响应,让Nmap超时然后再探测,以防探测帧或者响应丢失。关闭的端口常常是更大的问题。它们一般发回一个ICMP端口无法到达错误。但是不像关闭的TCP端口响应SYN或者Connect扫描所发送的RST报文,许多主机在默认情况下限制ICMP端口不可到达消息。Linux和Solaris对此特别严格。例如, Linux 2.4.20内核限制一秒钟只发送一条目标不可到达消息(见net/ipv4/icmp.c)。
  Nmap探测速率限制并相应地减慢来避免用那些目标机会丢弃的无用报文来阻塞网络。不幸的是,Linux式的一秒钟一个报文的限制使65,536个端口的扫描要花18小时以上。加速UDP扫描的方法包括并发扫描更多的主机,先只对主要端口进行快速扫描,从防火墙后面扫描,使用--host-timeout跳过慢速的主机。

7. 端口说明和扫描顺序(PORT SPECIFICATION AND SCAN ORDER)
  除了所有前面讨论的扫描方法,Nmap提供选项说明那些端口被扫描以及扫描是随机还是顺序进行。默认情况下,Nmap用指定的协议对端口1到1024以及nmap-services文件中列出的更高的端口在扫描。

-p (只扫描指定的端口)
  该选项指明您想扫描的端口,覆盖默认值。单个端口和用连字符表示的端口范围(如1-1023)都可以。范围的开始以及/或者结束值可以被省略,分别导致Nmap使用1和65535。所以您可以指定-p-从端口1扫描到65535。如果您特别指定,也可以扫描端口0。对于IP协议扫描(-sO),该选项指定您希望扫描的协议号(0-255)。
  当既扫描TCP端口又扫描UDP端口时,您可以通过在端口号前加上T:或者U:指定协议。协议限定符一直有效直到指定另一个。例如,参数 -p U:53,111,137,T:21-25,80,139,8080将扫描UDP端口53,111,和137,同时扫描列出的TCP端口。注意,要既扫描UDP又扫描TCP,您必须指定-sU,以及至少一个TCP扫描类型(如-sS,-sF,或者-sT)。如果没有给定协议限定符,端口号会被加到所有协议列表。

-F (快速 (有限的端口) 扫描)
  在nmap的nmap-services 文件中(对于-sO,是协议文件)指定您想要扫描的端口。 这比扫描所有65535个端口快得多。因为该列表包含如此多的TCP端口(1200多),这和默认的TCP扫描(大约1600个端口)速度差别不是很大。如果您用--datadir选项指定您自己的小小的nmap-services文件 ,差别会很惊人。

8. 服务和版本探测(SERVICE AND VERSION DETECTION)
-sV (版本探测)
  打开版本探测。您也可以用-A同时打开操作系统探测和版本探测。

--version-intensity (设置 版本扫描强度)
  当进行版本扫描(-sV) 时,nmap发送一系列探测报文,每个报文都被赋予一个1到9之间的值。被赋予较低值的探测报文对大范围的常见服务有效,而被赋予较高值的报文一般没什么用。强度水平说明了应该使用哪些探测报文。数值越高,服务越有可能被正确识别。然而,高强度扫描花更多时间。强度值必须在0和9之间。默认是7。当探测报文通过nmap-service-probes ports指示符注册到目标端口时,无论什么强度水平,探测报文都会被尝试。这保证了DNS探测将永远在任何开放的53端口尝试,SSL探测将在443端口尝试,等等。

--version-light (打开轻量级模式)
  这是 --version-intensity 2的方便的别名。轻量级模式使 版本扫描快许多,但它识别服务的可能性也略微小一点。

--version-all (尝试每个探测)
  --version-intensity 9的别名,保证对每个端口尝试每个探测报文。

9. 操作系统探测(OS DETECTION)
-O (启用操作系统检测)
  也可以使用-A来同时启用操作系统检测和版本检测。

10. 时间和性能(TIMING AND PERFORMANCE)
-T (设置时间模板)
  上述优化时间控制选项的功能很强大也很有效,但有些用户会被迷惑。此外,往往选择合适参数的时间超过了所需优化的扫描时间。因此,Nmap提供了一些简单的方法,使用6个时间模板,使用时采用-T选项及数字(0-5)或名称。模板名称有paranoid(0)、sneaky(1)、polite(2)、normal(3)、 aggressive(4)和insane(5)。前两种模式用于IDS躲避,Polite模式降低了扫描速度以使用更少的带宽和目标主机资源。默认模式为Normal,因此-T3 实际上是未做任何优化。Aggressive模式假设用户具有合适及可靠的网络从而加速扫描。Insane模式假设用户具有特别快的网络或者愿意为获得速度而牺牲准确性。

11. 输出
-v (提高输出信息的详细度)
  通过提高详细度,Nmap可以输出扫描过程的更多信息。输出发现的打开端口,若Nmap认为扫描需要更多时间会显示估计的结束时间。这个选项使用两次,会提供更详细的信息。这个选项使用两次以上不起作用。


12. 其它选项
-A (激烈扫描模式选项)
  这个选项启用额外的高级和高强度选项,目前还未确定代表的内容。目前,这个选项启用了操作系统检测(-O)和版本扫描(-sV),以后会增加更多的功能。目的是启用一个全面的扫描选项集合,不需要用户记忆大量的选项。这个选项仅仅启用功能,不包含用于可能所需要的 时间选项(如-T4)或细节选项(-v)。

13. 实例(Zenmap内置模板)
1. Intense scan
  nmap -T4 -A -v -PE -PS22,25,80 -PA21,23,80,3389 192.168.0.0/24
2. Intense scan plus UDP
  nmap -sS -sU -T4 -A -v -PE -PS22,25,80 -PA21,23,80,3389 192.168.0.0/24
3. Intense scan, all TCP ports
  nmap -p 1-65535 -T4 -A -v -PE -PS22,25,80 -PA21,23,80,3389 192.168.0.0/24
4. Intense scan, no ping
  nmap -T4 -A -v -PN 192.168.0.0/24
5. Ping scan
  nmap -sP -PE -PA21,23,80,3389 192.168.0.0/24
6. Quick scan
  nmap -T4 -F 192.168.0.0/24
7. Quick scan plus
  nmap -sV -T4 -O -F --version-light 192.168.0.0/24
8. Quick traceroute
  nmap -sP -PE -PS22,25,80 -PA21,23,80,3389 -PU -PO --traceroute 192.168.0.0/24
9. Regular scan
  nmap 192.168.0.0/24
10. Slow comprehensive scan
  nmap -sS -sU -T4 -A -v -PE -PP -PS21,22,23,25,80,113,31339 -PA80,113,443,10042 -PO --script all 192.168.0.0/24
2010-05-14(Fri)

GTK+和QT

GTK+
  GTK+最初是GIMP的专用开发库,后来发展为Unix-like系统下开发图形界面的应用程序的主流开发工具之一。GTK+是自由软件,并且是GNU计划的一部分。GTK+的许可协议是LGPL。
  GTK+使用C语言开发,但是其设计者使用面向对象技术。也提供了C++(gtkmm)、Perl、Ruby、Java和Python(PyGTK)绑定,其他的绑定有Ada、D、Haskell、PHP和所有的.NET编程语言。
  与其他很多部件工具箱不同,GTK+ 并不基于Xt。这一决策优劣互见:优点是 GTK+ 可以应用于其他系统,其灵活性也很强;而缺点就是它无法利用以传统方法为X11定制的X资源数据库。GTK+ 最早应用于X Window System,如今已移植至其他平台,诸如Microsoft Windows、DirectFB,以及Quartz在Mac OS X.
  Glade是一个界面设计工具,但是它也包含了一种描述GUI界面的XML语言,它和libglade一起工作就可以直接使用GTK和GNOME控件;新的Glade-3不再直接支持生成编程语言源代码。

事件(events)和信号(signals)
  GTK+函数工具库是基于 “事件”系统的。所有的 GUI 应用程序无一例外都是基于“事件”驱动的。假如没有“事件”发生,则应用程序就什么都不会做。在GTK+中一个事件就是从X窗口服务器传出来的一个消息。当一个“事件”发生时,他就会通过发送一个“信号”来表示他已经做出了反应。利用GTK+还可以为“信号”绑定专门的回调函数。也就是说回调函数只对他特定的“信号”才有反应并执行。

QT
  Qt(发音同cute)是一个跨平台的C++图形用户界面库,有时又被称为C++部件工具箱。最初由挪威TrollTech公司出品,目前包括Qt,基于Framebuffer的Qt Embedded,快速开发工具Qt Designer,国际化工具Qt Linguist等部分。目前是诺基亚(Nokia)的Qt Development Frameworks部门的产品。Qt支持所有Unix系统,也是流行的Linux桌面环境KDE的基础,同时它还支持Windows、Macintosh、Unix/X11等多种平台。
  Qt毕竟是商业化的东西,功能最完整,什么都好,包括类似java代码风格,良好的框架设计,但有几点值的一提:
  1.它没有使用STL,而是自己实现了一套替代方案QTL;
  2.事件模型使用自创的signal/slot机制,所以需要moc.exe来预处理头文件;
  3.对皮肤的支持不是很好,需要自己写Style类来定义各种控件的Paint;

信号和槽(signals/slots)
  Qt利用信号和槽机制取代传统的callback来进行对象之间的沟通。当操作事件发生的时候,对象会发送出一个信号(signal);而槽(slot)则是一个函数接受特定信号并且运行槽本身设置的动作。信号与槽之间,则通过QObject的静态方法connect来链接。
  信号和槽是QT自行定义的一种通信机制,它独立于标准 的C/C++语言,因此要正确的处理信号和槽,必须借助一个称为moc(Meta Object Compiler)的QT工具,该工具是一个C++预处理程序,它为高层次的事件处理自动生成所需要的附加代码。
  所有从QObject或其子类(例如Qwidget)派生的类都能够包含信号和槽。当对象改变其状态时,信号就由该对象发射(emit)出去,这就是对象所要做的全部事情,它不知道另一端是谁在接收这个信号。这就是真正的信息封装,它确保对象被当作一个真正的软件组件来使用。槽用于接收信号,但它们是普通的对象成员函数。一个槽并不知道是否有任何信号与自己相连接。而且,对象并不了解具体的通信机制。
  信号在任何运行点上皆可发射,甚至可以在槽里再发射另一个信号,信号与槽的链接不限定为一对一的链接,一个信号可以链接到多个槽或多个信号链接到同一个槽,甚至信号也可连接到信号,这时无论第一个信号什么时候发射系统都将立刻发射第二个信号。总之,信号与槽构造了一个强大的部件编程机制。
2010-05-13(Thu)

为你的健康干杯

  学习了健康心理学(health psychology),整理总结了一些保持健康的方法。
  目的是勉励自己和读到这篇Blog的各位朋友。

  首先我们要了解什么是健康,可不是简单的不生病和不受伤。
  健康是指躯体和精神上的一种稳定、充满活力的一般状态。躯体和精神的健康状态是密切关联的。

  下面的几步可以带来更多的欢乐和更好地健康状态,可以作为一种指导,鼓励你更积极的生活,并为你自己和他人创建一个更加积极的健康环境。
  1. 有规律的进行锻炼。
  2. 营养饮食,膳食平衡(多吃蔬菜、水果和谷物,以及低脂肪和热量的食物)。
  3. 维持适当的体重。
  4. 每晚睡眠7~8小时;每天休息或放松。当然,睡太多也不好,有句话怎么说来着,“没病睡到有病;小病睡到大病;大病……”,不说了,继续。
   5. 不吸烟,不***,适度饮酒。
  6. 保持乐观态度和发展友谊。
  7. 永远不要说关于自己的不好的事情,只给自己和他人建设性批评。
  8. 将你的反应、想法和感受同你的朋友、同事、家人以及其他人进行比较,从而估计自己的行为是否适宜。
  9. 结交一些密友,可以同他们分享感受、快乐和忧虑。
  10. 工作在手时请面向未来,达到目标、快乐在握时请珍惜现在。
  11. 永远对成功和快乐充满信心。了解你的个人优势。
  12. 记住失败和失望有时是伪装下的祝福。他们可以告诉你目标可能并不适合你,或者救你于未来更大的失败之前。吃一堑长一智,继续前进就是了。
   13. 培养健康的愉悦。花时间去放松、去反省、去享受爱好……

  精炼一下,12句,48个字,贴在自己经常可以看见的地方。

  规律锻炼,营养平衡,适当体重,
  适时睡眠,不沾烟毒,适度饮酒,
  乐观平和,行为适宜,充满信心,
  面向未来,珍惜现在,享受生活。

-----------------------------------------------
附记:

1.什么是健康心理学?
健康心理学是心理学的一个分支,致力于研究人们是怎样保持健康、他们患病的原因以及省病后的反应。

2.杂感
同样一件事情,在不同的心境下,感觉是不同的,你所做出的反应也可能是不一样的,要学会控制和调节自己的心理。
同样一件事情,不同的人的感觉是不一样的,不要把自己的感觉强加于别人。
这篇算是自己的一篇读书笔记吧,除了网络购书是谢谢书评,小学之后感觉基本就没有写过了。

不知道变态心理学有人敢兴趣吗?
2010-05-13(Thu)

Serif vs Sans-serif

简介
  衬线体(Serif)指的是有衬线的字体,又称为“有衬线体”(中文惯用名称“白体”),而与之相对的,没有衬线的称为“无衬线体”(中文惯用“黑体”)。衬线指的是字形笔画末端的装饰细节部分。无衬线字体在西文中习惯称sans-serif,其中sans为法语的 “无”的意思;而另外一些人习惯称grotesque(德语作 grotesk)或“哥特体”,把衬线体称为“罗马体”,但是这些词已经不是很常用了,只保留于字体名称中。

一般比较
  Serif的字体容易辨认,因此易读性较高。反之Sans Serif 则较醒目,但在行文阅读的情況下,Sans Serif 容易造成字母辨认的困扰,常会有来回重读及上下行错乱的情形。
  Serif 强调了字母笔画的开始及结束,因此较易前后连续性的辨识。
  Serif 强调一个word,而非单一的字母,反之Sans Serif则强调个别字母。
  在小字体的场合,通常Sans Serif比Serif更清晰。

不同用途
  在传统印刷中,衬线字体用于正文印刷,因为它被认为比无衬线体更易于阅读,是比较正统的。相对的,无衬线体用于短篇和标题等,能够读者注意,或者提供一种轻松的气氛。
  一般来说,人们倾向在长篇文章中使用衬线字体,如书籍、报纸和杂志等等。虽然在欧洲比北美更经常使用无衬线体,但在正式场合衬线字体还是使用最多的类型。
  印刷制品更多趋向使用衬线字体以方便阅读,但是在计算机领域中倾向使用无衬线字体以方便在显示器上显示。出于这个原因,大部分网页使用无衬线字体。因此,Windows Vista中的中文默认字体已经从原来的衬线字体(宋体或细明体)改变成了无衬线字体(微软雅黑或微软正黑体)。另外,为了更好解决衬线字体的显示问题,新的反锯齿和次像素显示(如ClearType)等技术开始广泛运用。

字体示例
  衬线体(Serif)
   Times New Roman、宋体
  无衬线体(Sans-serif)
   Tahoma、Arial、幼圆、隶书、微软雅黑
2010-04-23(Fri)

诸葛亮南征(南中平定战)

  诸葛亮南征,又称南中平定战,是公元225年蜀汉丞相诸葛亮发动的平定南中的战争。当时朱褒、雍闿、高定等人叛变,南中豪强孟获亦有参与,最后诸葛亮亲率大军南下,平定南中。

过程
资治通鉴卷第七十 魏纪二


南人叛变
世祖文皇帝下黄初四年(癸卯、公元223年)

  汉主病笃,命丞相亮辅太子,以尚书令李严为副。夏,四月,癸巳,汉主殂于永安,谥日昭烈。
  初,益州郡耆帅雍闿杀太守正昂,因士燮以求附于吴,又执太守成都张裔以与吴,吴以为永昌太守。永昌功曹吕凯、府丞王伉。率吏士闭境拒守,闿不能进,使郡人孟获诱扇诸夷,诸夷皆从之;柯太守朱褒、越巂夷王高定皆叛应。诸葛亮以新遭大丧,皆抚而不讨,务农殖谷,闭关息民,民安食足而后用之。

与吴修好
世祖文皇帝下黄初四年(癸卯、公元223年)

  汉尚书义阳邓芝言于诸葛亮曰:“今主上幼弱,初即尊位,宜遣大使重申吴好。”亮曰:“吾思之久矣,未得其人耳,今日始得之。”芝问:“其人为谁?”亮曰:“即使君也。”乃遣芝以中郎将修好于吴。冬,十月,芝至吴,时吴王犹未与魏绝,狐疑,不时见芝。芝乃自表请见曰:“臣今来,亦欲为吴,非但为蜀也。“吴王见之,曰:“孤诚愿与蜀和亲,然恐蜀主幼弱,国小势逼,为魏所乘,不自保全耳。”芝对曰:“吴、蜀二国,四州之地。大五命世之英,诸葛亮亦一时之杰也。蜀不重险之固,吴有三江之阻。合此二长,共为唇齿,进可并兼天下,退可鼎足而立,此理之自然也。大王今若委质于魏,魏必上望大王之入朝,下求太子内侍,若不从命,则奉辞伐叛,蜀亦顺流见可而进,如此,江南之地非复大王之有也。”吴王默然良久曰:“君言是也。”遂绝魏,专与汉连和。
世祖文皇帝下黄初五年(甲辰、公元224年)
  汉复遣邓芝聘于吴,吴主谓之曰:“若天下太平,二主分治,不亦乐乎?”芝对曰:“天无二日,土无二王。如并魏之后,大王未深识天命,君各茂其德,臣各尽其忠,将提枹鼓,则战争方始耳。”吴王大笑曰:“君之诚款乃当尔邪!”

平叛之战
世祖文皇帝下黄初六年(乙巳,公元225年)

  汉诸葛亮率众讨雍闿,参军马谡送之数十里。亮曰:“虽共谋之历年,今可更惠良规。”谡曰:“南中恃其险远,不服久矣;虽今日破之,明日复反 耳。今公方倾国北伐以事强贼,彼知官势内虚,其叛亦速。若殄尽遗类以除后患,既非仁者之情,且又不可仓卒也夫用兵之道,攻心为上,攻城为下,心战为上,兵战为下,愿公服其心而已。”亮纳其言。谡,良之弟也。
七擒孟获
  汉诸葛亮至南中,所在战捷。亮由越巂入,斩雍闿及高定。使庲降督益州李恢由益州入,门下督巴西马忠由牂柯入,击破诸县,复与亮合。孟获收闿余众以拒亮。获素为夷、汉所服,亮募生致之,既得,使观于营陈之间,间曰:“此军何如?”获曰:“向者不知虚实,故败。今蒙赐观营陈,若如此,即定易胜耳。”亮笑,纵使更战。七纵七禽而亮犹遣获,获止不去,曰:“公,天威也,南人不复反矣!”亮遂至滇池。
  益州、永昌、牂柯、越巂四郡皆平,亮即其渠率而用之。或以谏亮。亮曰:“若留外人,则当留兵,兵留则无所食,一不易也;加夷新伤破,父兄死丧,留外人而无兵者,必成祸患,二不易也;又,夷累有废杀之罪,自嫌衅重,若留外人,终不相信,三不易也。今吾欲使不留兵,不运粮,而纲纪粗定,夷、汉粗安故耳。”亮于是悉收其俊杰孟获等以为官属,出其金、银、丹、漆、耕牛、战马以给军国之用。自是终亮之世,夷不复反。

参战人物
* 蜀汉
  o 诸葛亮
    + 马忠
    + 李恢
    + 吕凯
    + 王伉
* 南中叛军
  o 雍闿(战死)
  o 朱褒(战死)
  o 高定(战死)
  o 孟获(投降)
自我介绍

Author:riuliyu
欢迎来到 FC2 博客

最新文章
最新留言
最新引用
月份存档
类别
FC2 Counter
搜索栏
RSS链接
链接
Powered By FC2博客

马上开始博客吧!!

Powered By FC2博客

加为好友

和此人成为好友