数据包传输的全过程

第一个

什么是 FTP?

FTP
是英文 File Transfer Protocol 的缩写,意思是文件传输协议。它和 HTTP 一样都是 Internet 上广泛使用的协议,用来在两台计算机之间互相传送文件。相比于 HTTP FTP 协议要复杂得多。复杂的原因,是因为 FTP 协议要用到两个 TCP 连接,一个是命令链路,用来在 FTP 客户端与服务器之间传递命令;另一个是数据链路,用来上传或下载数据。

  FTP
协议有两种工作方式: PORT 方式和 PASV 方式,中文意思为主动式和被动式。

  PORT
(主动)方式的连接过程是:客户端向服务器的 FTP 端口(默认是 21 )发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户端在命令链路上用 PORT 命令告诉服务器:“我打开了 XXXX 端口,你过来连接我”。于是服务器从 20 端口向客户端的 XXXX 端口发送连接请求,建立一条数据链路来传送数据。

  PASV
(被动)方式的连接过程是:客户端向服务器的 FTP 端口(默认是 21 )发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,服务器在命令链路上用 PASV 命令告诉客户端:“我打开了 XXXX 端口,你过来连接我”。于是客户端向服务器的 XXXX 端口发送连接请求,建立一条数据链路来传送数据。

  
从上面可以看出,两种方式的命令链路连接方法是一样的,而数据链路的建立方法就完全不同。而 FTP 的复杂性就在于此。

第二个  : HTTP 是什么 ?


当我们想浏览一个网站的时候,只要在浏览器的地址栏里输入网站的地址就可以了,例如: www.microsoft.com, 但是在浏览器的地址栏里面出现的却是: http://www.microsoft.com , 你知道为什么会多出一个“ http ”吗?  

一、 HTTP 协议是什么  
我们在浏览器的地址栏里输入的网站地址叫做 URL (Uniform Resource Locator ,统一资源定位符 ) 。就像每家每户都有一个门牌地址一样,每个网页也都有一个 Internet 地址。当你在浏览器的地址框中输入一个 URL 或是单击一个超级链接时, URL 就确定了要浏览的地址。浏览器通过超文本传输协议 (HTTP) ,将 Web 服务器上站点的网页代码提取出来,并翻译成漂亮的网页。因此,在我们认识 HTTP 之前,有必要先弄清楚 URL 的组成 , 例如: http://www.microsoft.com/china/index.htm 。它的含义如下:  
1. http://
:代表超文本传输协议,通知 microsoft.com 服务器显示 Web 页,通常不用输入;  
2. www
:代表一个 Web (万维网)服务器;  
3. Microsoft.com/
:这是装有网页的服务器的域名,或站点服务器的名称;  
4. China/
:为该服务器上的子目录,就好像我们的文件夹;  
5. Index.htm
index.htm 是文件夹中的一个 HTML 文件(网页)。  
我们知道, Internet 的基本协议是 TCP/IP 协议,然而在 TCP/IP 模型最上层的是应用层( Application layer ),它包含所有高层的协议。高层协议有:文件传输协议 FTP 、电子邮件传输协议 SMTP 、域名系统服务 DNS 、网络新闻传输协议 NNTP HTTP 协议等。  
HTTP
协议( Hypertext   Transfer   Protocol ,超文本传输协议)是用于从 WWW 服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示 ( 如文本先于图形 ) 等。这就是你为什么在浏览器中看到的网页地址都是以 http:// 开头的原因。  
WWW 诞生以来,一个多姿多彩的资讯和虚拟的世界便出现在我们眼前,可是我们怎么能够更加容易地找到我们需要的资讯呢?当决定使用超文本作为 WWW 文档的标准格式后,于是在 1990 年,科学家们立即制定了能够快速查找这些超文本文档的协议,即 HTTP 协议。经过几年的使用与发展,得到不断的完善和扩展,目前在 WWW 中使用的是 HTTP/1.0 的第六版。  

二、 HTTP 是怎样工作的  
既然我们明白了 URL 的构成,那么 HTTP 是怎么工作呢?我们接下来就要讨论这个问题。  
由于 HTTP 协议是基于请求 / 响应范式的(相当于客户机 / 服务器)。一个客户机与服务器建立连接后,发送一个请求给服务器,请求方式的格式为:统一资源标识符( URL )、协议版本号,后边是 MIME 信息包括请求修饰符、客户机信息和可能的内容。服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是 MIME 信息包括服务器信息、实体信息和可能的内容。  
许多 HTTP 通讯是由一个用户代理初始化的并且包括一个申请在源服务器上资源的请求。最简单的情况可能是在用户代理和服务器之间通过一个单独的连接来完成。在 Internet 上, HTTP 通讯通常发生在 TCP/IP 连接之上。缺省端口是 TCP 80 ,但其它的端口也是可用的。但这并不预示着 HTTP 协议在 Internet 或其它网络的其它协议之上才能完成。 HTTP 只预示着一个可靠的传输。  
这个过程就好像我们打电话订货一样,我们可以打电话给商家,告诉他我们需要什么规格的商品,然后商家再告诉我们什么商品有货,什么商品缺货。这些,我们是通过电话线用电话联系( HTTP 是通过 TCP/IP ),当然我们也可以通过传真,只要商家那边也有传真。  
以上简要介绍了 HTTP 协议的宏观运作方式,下面介绍一下 HTTP 协议的内部操作过程。  
WWW 中,“客户”与“服务器”是一个相对的概念,只存在于一个特定的连接期间,即在某个连接中的客户在另一个连接中可能作为服务器。基于 HTTP 协议的客户 / 服务器模式的信息交换过程,它分四个过程:建立连接、发送请求信息、发送响应信息、关闭连接。这就好像上面的例子,我们电话订货的全过程。  
其实简单说就是任何服务器除了包括 HTML 文件以外,还有一个 HTTP 驻留程序,用于响应用户请求。你的浏览器是 HTTP 客户,向服务器发送请求,当浏览器中输入了一个开始文件或点击了一个超级链接时,浏览器就向服务器发送了 HTTP 请求,此请求被送往由 IP 地址指定的 URL 。驻留程序接收到请求,在进行必要的操作后回送所要求的文件。在这一过程中,在网络上发送和接收的数据已经被分成一个或多个数据包( packet ),每个数据包包括:要传送的数据;控制信息,即告诉网络怎样处理数据包。 TCP/IP 决定了每个数据包的格式。如果事先不告诉你,你可能不会知道信息被分成用于传输和再重新组合起来的许多小块。  
也就是说商家除了拥有商品之外,它也有一个职员在接听你的电话,当你打电话的时候,你的声音转换成各种复杂的数据,通过电话线传输到对方的电话机,对方的电话机又把各种复杂的数据转换成声音,使得对方商家的职员能够明白你的请求。这个过程你不需要明白声音是怎么转换成复杂的数据的。
第三个  : ipc$  是什么?



IPC$(Internet Process Connection)
是共享 /" 命名管道 /" 的资源 ( 大家都是这么说的 ) ,它是为了让进程间通信而开放的命名管道,可以通过验证用户名和密码获得相应的权限 , 在远程管理计算机和查看计算机的共享资源时使用。  
利用 IPC$, 连接者甚至可以与目标主机建立一个空的连接而无需用户名与密码 ( 当然 , 对方机器必须开了 ipc$ 共享 , 否则你是连接不上的 ) ,而利用这个空的连接,连接者还可以得到目标主机上的用户列表 ( 不过负责的管理员会禁止导出用户列表的 )  
我们总在说 ipc$ 漏洞 ipc$ 漏洞 , 其实 ,ipc$ 并不是真正意义上的漏洞 , 它是为了方便管理员的远程管理而开放的远程网络登陆功能 , 而且还打开了默认共享 , 即所有的逻辑盘 (c$,d$,e$ …… ) 和系统目录 winnt windows(admin$)  
所有的这些 , 初衷都是为了方便管理员的管理 , 但好的初衷并不一定有好的收效 , 一些别有用心者 ( 到底是什么用心 ? 我也不知道 , 代词一个 ) 会利用 IPC$ ,访问共享资源 , 导出用户列表 , 并使用一些字典工具,进行密码探测 , 寄希望于获得更高的权限 , 从而达到不可告人的目的
解惑
1)IPC
连接是 Windows NT 及以上系统中特有的远程网络登陆功能,其功能相当于 Unix 中的 Telnet, 由于 IPC$ 功能需要用到 Windows NT 中的很多 DLL 函数,所以不能在 Windows 9.x 中运行。  
也就是说只有 nt/2000/xp 才可以建立 ipc$ 连接 ,98/me 是不能建立 ipc$ 连接的 ( 但有些朋友说在 98 下能建立空的连接 , 不知道是真是假 , 不过现在都 2003 年了 , 建议 98 的同志换一下系统吧 ,98 不爽的
2)
即使是空连接也不是 100% 都能建立成功 , 如果对方关闭了 ipc$ 共享 , 你仍然无法建立连接  
3)
并不是说建立了 ipc$ 连接就可以查看对方的用户列表 , 因为管理员可以禁止导出用户列表第四个  : ASP  是什么 ?


ASP
Active Server Page 的缩写。它是一种包含了使用 VB Script Jscript 脚本程序代码的网页。当浏览器浏览 ASP 网页时 , Web 服务器就会根据请求生成相应的 HTML 代码然后再返回给浏览器 , 这样浏览器端看到的 就是动态生成的网页。 ASP 是微软公司开发的代替 CGI 脚本程序的一种应用 , 它可以与数据库和其它程序进行交互。是一种简单、方便的编程工具。在了解了 VBSCRIPT 的基本语法后,只需要清楚各个组件的用途、属性、方法,就可以轻松编写出自己的 ASP 系统。 ASP 的网页文件的格式是 .ASP
第五个  :  什么是病毒


  下面我们谈一谈病毒。您以前是否听说过电脑病毒 ? 不要一听到病毒就浑身发抖,只要了解了病毒,对付起来还是很容易的。  

  电脑病毒与我们平时所说的医学上的生物病毒是不一样的,它实际上是一种电脑程序,只不过这种程序比较特殊,它是专门给人们捣乱和搞破坏的,它寄生在其它文件中,而且会不断地自我复制并传染给别的文件,没有一点好作用。  

  电脑病毒发作了都会有哪些症状呢?  

  电脑染上病毒后,如果没有发作,是很难觉察到的。但病毒发作时就很容易感觉出来:  

  有时电脑的工作会很不正常,有时会莫名其妙的死机,有时会突然重新启动,有时程序会干脆运行不了。  

  ◎ 电脑染毒后表现为:工作很不正常,莫名其妙死机,突然重新启动,程序运行不了。  

  有的病毒发作时满屏幕会下雨,有的屏幕上会出现毛毛虫等,甚至在屏幕上出现对话框,这些病毒发作时通常会破坏文件,是非常危险的,反正只要电脑工作不正常,就有可能是染上了病毒。病毒所带来的危害更是不言而喻了。  

  而且,以前人们一直以为,病毒只能破坏软件,对硬件毫无办法,可是 CIH 病毒打破了这个神话,因为它竟然在某种情况下可以破坏硬件!  

  电脑病毒和别的程序一样,它也是人编写出来的。既然病毒也是人编的程序,那就会有办法来对付它。最重要的是采取各种安全措施预防病毒,不给病毒以可乘之机。另外,就是使用各种杀毒程序了。它们可以把病毒杀死,从电脑中清除出去。
#6 

病毒后记


 其实现在的病毒,随着网络的发展。已经变的更加的复杂。它与黑客技术、木马等技术相结合,让你无法轻易查杀!其威害之大,由近期的冲击波病毒,仅见一斑! 
 所以大家学习了解电脑知识与安全知识,是必不可少的。我们这里学习黑客等技术,也不是教你如何去攻击别人,这样是不道德的,主要是了解技术后,用于防范。
 
 再一个,如何做好防范,让病毒无法入手。才是最重要的。对于初学的朋友,一个好的杀毒工具是必须的。个人认为正版的瑞星还是不错的,其网上升级速度很快,防与杀的效果也很好!
 

=====+++++++===============
 
我在普及最基本的知识时,遇到一个难题,我有时不知道该讲些什么?以什么为主题呢?所以希望大家在回贴时,如果希望了解什么相关的问题,请提出来。我好跟据提问,来安排主题!
 
对于所发布的主题,如有不明白的,也请及时提出,我会尽力作出完美的解答!
#7 

第六个 : 什么是路由器


  路由器是一种连接多个网络或网段的网络设备,它能将不同网络或网段之间的数据信息进行“翻译”,以使它们能够相互“读”懂对方的数据,从而构成一个更大的网络。 
 
 
   路由器有两大典型功能,即数据通道功能和控制功能。数据通道功能包括转发决定、背板转发以及输出链路调度等,一般由特定的硬件来完成;控制功能一般用软件来实现,包括与相邻路由器之间的信息交换、系统配置、系统管理等。
 

  多少年来,路由器的发展有起有伏。90年代中期,传统路由器成为制约因特网发展的瓶颈。ATM交换机取而代之,成为IP骨干网的核心,路由器变成了配角。进入90年代末期,Internet规模进一步扩大,流量每半年翻一番,ATM网又成为瓶颈,路由器东山再起,Gbps路由交换机在1997年面世后,人们又开始以Gbps路由交换机取代ATM交换机,架构以路由器为核心的骨干网。
 


附:路由器原理及路由协议
 
近十年来,随着计算机网络规模的不断扩大,大型互联网络(如Internet)的迅猛发展,路由技术在网络技术中已逐渐成为关键部分,路由器也随之成为最重要的网络设备。用户的需求推动着路由技术的发展和路由器的普及,人们已经不满足于仅在本地网络上共享信息,而希望最大限度地利用全球各个地区、各种类型的网络资源。而在目前的情况下,任何一个有一定规模的计算机网络(如企业网、校园网、智能大厦等),无论采用的是快速以大网技术、FDDI技术,还是ATM技术,都离不开路由器,否则就无法正常运作和管理。
 

1 网络互连
 
把自己的网络同其它的网络互连起来,从网络中获取更多的信息和向网络发布自己的消息,是网络互连的最主要的动力。网络的互连有多种方式,其中使用最多的是网桥互连和路由器互连。
 

1.1 网桥互连的网络
 

网桥工作在OSI模型中的第二层,即链路层。完成数据帧(frame)的转发,主要目的是在连接的网络间提供透明的通信。网桥的转发是依据数据帧中的源地址和目的地址来判断一个帧是否应转发和转发到哪个端口。帧中的地址称为“MAC”地址或“硬件”地址,一般就是网卡所带的地址。
 

网桥的作用是把两个或多个网络互连起来,提供透明的通信。网络上的设备看不到网桥的存在,设备之间的通信就如同在一个网上一样方便。由于网桥是在数据帧上进行转发的,因此只能连接相同或相似的网络(相同或相似结构的数据帧),如以太网之间、以太网与令牌环(token ring)之间的互连,对于不同类型的网络(数据帧结构不同),如以太网与X.25之间,网桥就无能为力了。
 

网桥扩大了网络的规模,提高了网络的性能,给网络应用带来了方便,在以前的网络中,网桥的应用较为广泛。但网桥互连也带来了不少问题:一个是广播风暴,网桥不阻挡网络中广播消息,当网络的规模较大时(几个网桥,多个以太网段),有可能引起广播风暴(broadcasting storm),导致整个网络全被广播信息充满,直至完全瘫痪。第二个问题是,当与外部网络互连时,网桥会把内部和外部网络合二为一,成为一个网,双方都自动向对方完全开放自己的网络资源。这种互连方式在与外部网络互连时显然是难以接受的。问题的主要根源是网桥只是最大限度地把网络沟通,而不管传送的信息是什么。
 

1.2 路由器互连网络
 

路由器互连与网络的协议有关,我们讨论限于TCP/IP网络的情况。
 

路由器工作在OSI模型中的第三层,即网络层。路由器利用网络层定义的“逻辑”上的网络地址(即IP地址)来区别不同的网络,实现网络的互连和隔离,保持各个网络的独立性。路由器不转发广播消息,而把广播消息限制在各自的网络内部。发送到其他网络的数据茵先被送到路由器,再由路由器转发出去。
 

IP路由器只转发IP分组,把其余的部分挡在网内(包括广播),从而保持各个网络具有相对的独立性,这样可以组成具有许多网络(子网)互连的大型的网络。由于是在网络层的互连,路由器可方便地连接不同类型的网络,只要网络层运行的是IP协议,通过路由器就可互连起来。
 

网络中的设备用它们的网络地址(TCP/IP网络中为IP地址)互相通信。IP地址是与硬件地址无关的“逻辑”地址。路由器只根据IP地址来转发数据。IP地址的结构有两部分,一部分定义网络号,另一部分定义网络内的主机号。目前,在Internet网络中采用子网掩码来确定IP地址中网络地址和主机地址。子网掩码与IP地址一样也是32bit,并且两者是一一对应的,并规定,子网掩码中数字为“1”所对应的IP地址中的部分为网络号,为“0”所对应的则为主机号。网络号和主机号合起来,才构成一个完整的IP地址。同一个网络中的主机IP地址,其网络号必须是相同的,这个网络称为IP子网。
 

通信只能在具有相同网络号的IP地址之间进行,要与其它IP子网的主机进行通信,则必须经过同一网络上的某个路由器或网关(gateway)出去。不同网络号的IP地址不能直接通信,即使它们接在一起,也不能通信。
 

路由器有多个端口,用于连接多个IP子网。每个端口的IP地址的网络号要求与所连接的IP子网的网络号相同。不同的端口为不同的网络号,对应不同的IP子网,这样才能使各子网中的主机通过自己子网的IP地址把要求出去的IP分组送到路由器上
 

2 路由原理
 

当IP子网中的一台主机发送IP分组给同一IP子网的另一台主机时,它将直接把IP分组送到网络上,对方就能收到。而要送给不同IP于网上的主机时,它要选择一个能到达目的子网上的路由器,把IP分组送给该路由器,由路由器负责把IP分组送到目的地。如果没有找到这样的路由器,主机就把IP分组送给一个称为“缺省网关(default gateway)”的路由器上。“缺省网关”是每台主机上的一个配置参数,它是接在同一个网络上的某个路由器端口的IP地址。
 

路由器转发IP分组时,只根据IP分组目的IP地址的网络号部分,选择合适的端口,把IP分组送出去。同主机一样,路由器也要判定端口所接的是否是目的子网,如果是,就直接把分组通过端口送到网络上,否则,也要选择下一个路由器来传送分组。路由器也有它的缺省网关,用来传送不知道往哪儿送的IP分组。这样,通过路由器把知道如何传送的IP分组正确转发出去,不知道的IP分组送给“缺省网关”路由器,这样一级级地传送,IP分组最终将送到目的地,送不到目的地的IP分组则被网络丢弃了。
 

目前TCP/IP网络,全部是通过路由器互连起来的,Internet就是成千上万个IP子网通过路由器互连起来的国际性网络。这种网络称为以路由器为基础的网络(router based network),形成了以路由器为节点的“网间网”。在“网间网”中,路由器不仅负责对IP分组的转发,还要负责与别的路由器进行联络,共同确定“网间网”的路由选择和维护路由表。
 

路由动作包括两项基本内容:寻径和转发。寻径即判定到达目的地的最佳路径,由路由选择算法来实现。由于涉及到不同的路由选择协议和路由选择算法,要相对复杂一些。为了判定最佳路径,路由选择算法必须启动并维护包含路由信息的路由表,其中路由信息依赖于所用的路由选择算法而不尽相同。路由选择算法将收集到的不同信息填入路由表中,根据路由表可将目的网络与下一站(nexthop)的关系告诉路由器。路由器间互通信息进行路由更新,更新维护路由表使之正确反映网络的拓扑变化,并由路由器根据量度来决定最佳路径。这就是路由选择协议(routing protocol),例如路由信息协议(RIP)、开放式最短路径优先协议(OSPF)和边界网关协议(BGP)等。
 

转发即沿寻径好的最佳路径传送信息分组。路由器首先在路由表中查找,判明是否知道如何将分组发送到下一个站点(路由器或主机),如果路由器不知道如何发送分组,通常将该分组丢弃;否则就根据路由表的相应表项将分组发送到下一个站点,如果目的网络直接与路由器相连,路由器就把分组直接送到相应的端口上。这就是路由转发协议(routed protocol)。
 

路由转发协议和路由选择协议是相互配合又相互独立的概念,前者使用后者维护的路由表,同时后者要利用前者提供的功能来发布路由协议数据分组。下文中提到的路由协议,除非特别说明,都是指路由选择协议,这也是普遍的习惯。
 

3 路由协议
 

典型的路由选择方式有两种:静态路由和动态路由。
 

静态路由是在路由器中设置的固定的路由表。除非网络管理员干预,否则静态路由不会发生变化。由于静态路由不能对网络的改变作出反映,一般用于网络规模不大、拓扑结构固定的网络中。静态路由的优点是简单、高效、可靠。在所有的路由中,静态路由优先级最高。当动态路由与静态路由发生冲突时,以静态路由为准。
 

动态路由是网络中的路由器之间相互通信,传递路由信息,利用收到的路由信息更新路由器表的过程。它能实时地适应网络结构的变化。如果路由更新信息表明发生了网络变化,路由选择软件就会重新计算路由,并发出新的路由更新信息。这些信息通过各个网络,引起各路由器重新启动其路由算法,并更新各自的路由表以动态地反映网络拓扑变化。动态路由适用于网络规模大、网络拓扑复杂的网络。当然,各种动态路由协议会不同程度地占用网络带宽和CPU资源。
 

静态路由和动态路由有各自的特点和适用范围,因此在网络中动态路由通常作为静态路由的补充。当一个分组在路由器中进行寻径时,路由器首先查找静态路由,如果查到则根据相应的静态路由转发分组;否则再查找动态路由。
 

根据是否在一个自治域内部使用,动态路由协议分为内部网关协议(IGP)和外部网关协议(EGP)。这里的自治域指一个具有统一管理机构、统一路由策略的网络。自治域内部采用的路由选择协议称为内部网关协议,常用的有RIP、OSPF;外部网关协议主要用于多个自治域之间的路由选择,常用的是BGP和BGP-4。下面分别进行简要介绍。
 

3.1 RIP路由协议
 

RIP协议最初是为Xerox网络系统的Xerox parc通用协议而设计的,是Internet中常用的路由协议。RIP采用距离向量算法,即路由器根据距离选择路由,所以也称为距离向量协议。路由器收集所有可到达目的地的不同路径,并且保存有关到达每个目的地的最少站点数的路径信息,除到达目的地的最佳路径外,任何其它信息均予以丢弃。同时路由器也把所收集的路由信息用RIP协议通知相邻的其它路由器。这样,正确的路由信息逐渐扩散到了全网。
 

RIP使用非常广泛,它简单、可靠,便于配置。但是RIP只适用于小型的同构网络,因为它允许的最大站点数为15,任何超过15个站点的目的地均被标记为不可达。而且RIP每隔30s一次的路由信息广播也是造成网络的广播风暴的重要原因之一。
 

3.2 OSPF路由协议
 

80年代中期,RIP已不能适应大规模异构网络的互连,0SPF随之产生。它是网间工程任务组织(1ETF)的内部网关协议工作组为IP网络而开发的一种路由协议。
 

0SPF是一种基于链路状态的路由协议,需要每个路由器向其同一管理域的所有其它路由器发送链路状态广播信息。在OSPF的链路状态广播中包括所有接口信息、所有的量度和其它一些变量。利用0SPF的路由器首先必须收集有关的链路状态信息,并根据一定的算法计算出到每个节点的最短路径。而基于距离向量的路由协议仅向其邻接路由器发送有关路由更新信息。
 

与RIP不同,OSPF将一个自治域再划分为区,相应地即有两种类型的路由选择方式:当源和目的地在同一区时,采用区内路由选择;当源和目的地在不同区时,则采用区间路由选择。这就大大减少了网络开销,并增加了网络的稳定性。当一个区内的路由器出了故障时并不影响自治域内其它区路由器的正常工作,这也给网络的管理、维护带来方便。
 

3.3 BGP和BGP-4路由协议
 

BGP是为TCP/IP互联网设计的外部网关协议,用于多个自治域之间。它既不是基于纯粹的链路状态算法,也不是基于纯粹的距离向量算法。它的主要功能是与其它自治域的BGP交换网络可达信息。各个自治域可以运行不同的内部网关协议。BGP更新信息包括网络号/自治域路径的成对信息。自治域路径包括到达某个特定网络须经过的自治域串,这些更新信息通过TCP传送出去,以保证传输的可靠性。
 

为了满足Internet日益扩大的需要,BGP还在不断地发展。在最新的BGp4中,还可以将相似路由合并为一条路由。
 

3.4 路由表项的优先问题
 

在一个路由器中,可同时配置静态路由和一种或多种动态路由。它们各自维护的路由表都提供给转发程序,但这些路由表的表项间可能会发生冲突。这种冲突可通过配置各路由表的优先级来解决。通常静态路由具有默认的最高优先级,当其它路由表表项与它矛盾时,均按静态路由转发。
 

4 路由算法
 

路由算法在路由协议中起着至关重要的作用,采用何种算法往往决定了最终的寻径结果,因此选择路由算法一定要仔细。通常需要综合考虑以下几个设计目标:
 

——(1)最优化:指路由算法选择最佳路径的能力。
 

——(2)简洁性:算法设计简洁,利用最少的软件和开销,提供最有效的功能。
 

——(3)坚固性:路由算法处于非正常或不可预料的环境时,如硬件故障、负载过高或操作失误时,都能正确运行。由于路由器分布在网络联接点上,所以在它们出故障时会产生严重后果。最好的路由器算法通常能经受时间的考验,并在各种网络环境下被证实是可靠的。
 

——(4)快速收敛:收敛是在最佳路径的判断上所有路由器达到一致的过程。当某个网络事件引起路由可用或不可用时,路由器就发出更新信息。路由更新信息遍及整个网络,引发重新计算最佳路径,最终达到所有路由器一致公认的最佳路径。收敛慢的路由算法会造成路径循环或网络中断。
 

——(5)灵活性:路由算法可以快速、准确地适应各种网络环境。例如,某个网段发生故障,路由算法要能很快发现故障,并为使用该网段的所有路由选择另一条最佳路径。
 

路由算法按照种类可分为以下几种:静态和动态、单路和多路、平等和分级、源路由和透明路由、域内和域间、链路状态和距离向量。前面几种的特点与字面意思基本一致,下面着重介绍链路状态和距离向量算法。
 

链路状态算法(也称最短路径算法)发送路由信息到互联网上所有的结点,然而对于每个路由器,仅发送它的路由表中描述了其自身链路状态的那一部分。距离向量算法(也称为Bellman-Ford算法)则要求每个路由器发送其路由表全部或部分信息,但仅发送到邻近结点上。从本质上来说,链路状态算法将少量更新信息发送至网络各处,而距离向量算法发送大量更新信息至邻接路由器。
 

由于链路状态算法收敛更快,因此它在一定程度上比距离向量算法更不易产生路由循环。但另一方面,链路状态算法要求比距离向量算法有更强的CPU能力和更多的内存空间,因此链路状态算法将会在实现时显得更昂贵一些。除了这些区别,两种算法在大多数环境下都能很好地运行。
 

最后需要指出的是,路由算法使用了许多种不同的度量标准去决定最佳路径。复杂的路由算法可能采用多种度量来选择路由,通过一定的加权运算,将它们合并为单个的复合度量、再填入路由表中,作为寻径的标准。通常所使用的度量有:路径长度、可靠性、时延、带宽、负载、通信成本等
 


5 新一代路由器
 

由于多媒体等应用在网络中的发展,以及ATM、快速以太网等新技术的不断采用,网络的带宽与速率飞速提高,传统的路由器已不能满足人们对路由器的性能要求。因为传统路由器的分组转发的设计与实现均基于软件,在转发过程中对分组的处理要经过许多环节,转发过程复杂,使得分组转发的速率较慢。另外,由于路由器是网络互连的关键设备,是网络与其它网络进行通信的一个“关口”,对其安全性有很高的要求,因此路由器中各种附加的安全措施增加了CPU的负担,这样就使得路由器成为整个互联网上的“瓶颈”。
 

传统的路由器在转发每一个分组时,都要进行一系列的复杂操作,包括路由查找、访问控制表匹配、地址解析、优先级管理以及其它的附加操作。这一系列的操作大大影响了路由器的性能与效率,降低了分组转发速率和转发的吞吐量,增加了CPU的负担。而经过路由器的前后分组间的相关性很大,具有相同目的地址和源地址的分组往往连续到达,这为分组的快速转发提供了实现的可能与依据。新一代路由器,如IP Switch、Tag Switch等,就是采用这一设计思想用硬件来实现快速转发,大大提高了路由器的性能与效率。
 

新一代路由器使用转发缓存来简化分组的转发操作。在快速转发过程中,只需对一组具有相同目的地址和源地址的分组的前几个分组进行传统的路由转发处理,并把成功转发的分组的目的地址、源地址和下一网关地址(下一路由器地址)放人转发缓存中。当其后的分组要进行转发时,茵先查看转发缓存,如果该分组的目的地址和源地址与转发缓存中的匹配,则直接根据转发缓存中的下一网关地址进行转发,而无须经过传统的复杂操作,大大减轻了路由器的负担,达到了提高路由器吞吐量的目标。
第七个:什么是肉鸡



肉鸡就是具有最高管理权限的远程电脑。简单的说就是受你控制的远程电脑。肉鸡可以是 win Unix/Linux ……等各种系统;肉鸡可以是一家公司的服务器,一家网站的服务器,甚至是美国白宫或军方的电脑,只要你有这本事入侵并控制他,呵呵。莱鸟所说用的肉鸡一般是开了 3389 端口的 Win2K 系统的服务器。  
要登陆肉鸡,必须知道 3 个参数:远程电脑的 IP 、用户名、密码。
第八个:什么是 shell


  操作系统与外部最主要的接口就叫做 shell shell 是操作系统最外面的一层。 shell 管理你与操作系统之间的交互 : 等待你输入,向操作系统解释你的输入,并且处理各种各样的操作系统的输出结果。  
   shell 提供了你与操作系统之间通讯的方式。这种通讯可以以交互方式(从键盘输入,并且可以立即得到响应),或者以 shell script( 非交互 ) 方式执行。 shell script 是放在文件中的一串 shell 和操作系统命令,它们可以被重复使用。本质上, shell script 是命令行命令简单的组合到一个文件里面。  
   Shell 基本上是一个命令解释器,类似于 DOS 下的 command.com 。它接收用户命令(如 ls ) ,然后调用相应的应用程序。较为通用的 shell 有标准的 Bourne shell (sh) C shell (csh)  


交互式 shell 和非交互式 shell 
交互式模式就是 shell 等待你的输入,并且执行你提交的命令。这种模式被称作交互式是因为 shell 与用户进行交互。这种模式也是大多数用户非常熟悉的:登录、执行一些命令、签退。当你签退后, shell 也终止了。  
shell
也可以运行在另外一种模式:非交互式模式。在这种模式下, shell 不与你进行交互,而是读取存放在文件中的命令 , 并且执行它们。当它读到文件的结尾, shell 也就终止了。  

shell
的类型  
UNIX 中主要有两大类 shell 
Bourne shell (
包括  sh, ksh, and bash) 
Bourne shell ( sh) 
Korn shell ( ksh) 
Bourne Again shell ( bash) 
POSIX shell ( sh) 
C shell (
包括  csh and tcsh) 
C shell ( csh) 
TENEX/TOPS C shell ( tcsh) 

Bourne Shell 
最初的 UNIX shell 是由 Stephen R. Bourne 20 世纪 70 年代中期在新泽西的 AT&T 贝尔实验室编写的,这就是 Bourne shell Bourne shell  是一个交换式的命令解释器和命令编程语言。 Bourne shell  可以运行为 login shell 或者 login shell 的子 shell(subshell) 。只有 login 命令可以调用 Bourne shell 作为一个 login shell 。此时, shell 先读取 /etc/profile 文件和 $HOME/.profile 文件。 /etc/profile 文件为所有的用户定制环境 ,$HOME/.profile 文件为本用户定制环境。最后, shell 会等待读取你的输入。  

C Shell 
Bill Joy
20 世纪 80 年代早期,在 Berkeley 的加利福尼亚大学开发了 C shell 。它主要是为了让用户更容易的使用交互式功能,并把 ALGOL 风格的语法结构变成了 C 语言风格。它新增了命令历史、别名、文件名替换、作业控制等功能。  

Korn Shell 
有很长一段时间,只有两类 shell 供人们选择, Bourne shell 用来编程, C shell 用来交互。为了改变这种状况, AT&T bell 实验室 David Korn 开发了 Korn shell ksh 结合了所有的 C shell 的交互式特性,并融入了 Bourne shell 的语法。因此, Korn shell 广受用户的欢迎。它还新增了数学计算 , 进程协作 (coprocess) 、行内编辑 (inline editing) 等功能。 Korn Shell  是一个交互式的命令解释器和命令编程语言 . 它符合 POSIX ——一个操作系统的国际标准 .POSIX 不是一个操作系统 , 而是一个目标在于应用程序的移植性的标准——在源程序一级跨越多种平台。  

Bourne Again Shell (bash) 
bash
GNU 计划的一部分,用来替代 Bourne shell 。它用于基于 GNU 的系统如 Linux. 大多数的 Linux(Red Hat, Slackware, Caldera) 都以 bash 作为缺省的 shell ,并且运行 sh 时,其实调用的是 bash  

POSIX Shell 
POSIX shell 
Korn shell 的一个变种 当前提供 POSIX shell 的最大卖主是 Hewlett-Packard 。在 HP-UX 11.0 , POSIX shell  就是 /bin/sh, bsh /usr/old/bin/sh. 

各主要操作系统下缺省的 shell: 
AIX 
下是 Korn Shell. 
Solaris
FreeBSD 缺省的是 Bourne shell. 
HP-UX
缺省的是 POSIX shell. 
Linux
Bourne Again shell. 

TIP  
#!/usr/bin/sh
的用途  
shell script
的第一行一般都是 #!/usr/bin/sh #!/usr/bin/ksh 等,它的用途就是指出本脚本是用的哪种 shell 写的,执行时系统应该用哪种 shell 来解释执行它。  

附: LINUX 系统的 shell 原理  

   Linux 系统的 shell 作为操作系统的外壳,为用户提供使用操作系统的接口。它是命令语言、命令解释程序及程序设计语言的统称。  

   shell 是用户和 Linux 内核之间的接口程序,如果把 Linux 内核想象成一个球体的中心, shell 就是围绕内核的外层。当从 shell 或其他程序向 Linux 传递命令时,内核会做出相应的反应。    shell 是一个命令语言解释器,它拥有自己内建的 shell 命令集, shell 也能被系统中其他应用程序所调用。用户在提示符下输入的命令都由 shell 先解释然后传给 Linux 核心。  

  有一些命令,比如改变工作目录命令 cd ,是包含在 shell 内部的。还有一些命令,例如拷贝命令 cp 和移动命令 rm ,是存在于文件系统中某个目录下的单独的程序。对用户而言,不必关心一个命令是建立在 shell 内部还是一个单独的程序。  

   shell 首先检查命令是否是内部命令,若不是再检查是否是一个应用程序 ( 这里的应用程序可以是 Linux 本身的实用程序,如 ls rm ,也可以是购买的商业程序,如 xv ,或者是自由软件,如 emacs) 。然后 shell 在搜索路径里寻找这些应用程序 ( 搜索路径就是一个能找到可执行程序的目录列表 ) 。如果键入的命令不是一个内部命令并且在路径里没有找到这个可执行文件,将会显示一条错误信息。如果能够成功找到命令,该内部命令或应用程序将被分解为系统调用并传给 Linux 内核。  

   shell 的另一个重要特性是它自身就是一个解释型的程序设计语言, shell 程序设计语言支持绝大多数在高级语言中能见到的程序元素,如函数、变量、数组和程序控制结构。 shell 编程语言简单易学,任何在提示符中能键入的命令都能放到一个可执行的 shell 程序中。  

  当普通用户成功登录,系统将执行一个称为 shell 的程序。正是 shell 进程提供了命令行提示符。作为默认值 (TurboLinux 系统默认的 shell BASH) ,对普通用户用“ $ ”作提示符,对超级用户 (root) 用“ # ”作提示符。  

  一旦出现了 shell 提示符,就可以键入命令名称及命令所需要的参数。 shell 将执行这些命令。如果一条命令花费了很长的时间来运行,或者在屏幕上产生了大量的输出,可以从键盘上按 ctrl+c 发出中断信号来中断它 ( 在正常结束之前,中止它的执行 )  

  当用户准备结束登录对话进程时,可以键入 logout 命令、 exit 命令或文件结束符 (EOF)( ctrl+d 实现 ) ,结束登录。  

  我们来实习一下 shell 是如何工作的。  

   $ make work 

   make:***No rule to make target ‘work’. Stop. 

  

  注释: make 是系统中一个命令的名字,后面跟着命令参数。在接收到这个命令后, shell 便执行它。本例中,由于输入的命令参数不正确,系统返回信息后停止该命令的执行。  

  在例子中, shell 会寻找名为 make 的程序,并以 work 为参数执行它。 make 是一个经常被用来编译大程序的程序,它以参数作为目标来进行编译。在“ make work ”中, make 编译的目标是 work 。因为 make 找不到以 work 为名字的目标,它便给出错误信息表示运行失败,用户又回到系统提示符下。  

  另外,用户键入有关命令行后,如果 shell 找不到以其中的命令名为名字的程序,就会给出错误信息。例如,如果用户键入:  

   $ myprog 

   bash:myprog:command not found 

  

  可以看到,用户得到了一个没有找到该命令的错误信息。用户敲错命令后,系统一般会给出这样的错误信息。

#10 这个重点看!!!

第九个:什么是端口?


  在开始讲什么是端口之前,我们先来聊一聊什么是 port 呢?常常在网络上听说『我的主机开了多少的 port ,会不会被入侵呀!?』或者是说『开那个 port 会比较安全?又,我的服务应该对应什么 port 呀!?』呵呵!很神奇吧!怎么一部主机上面有这么多的奇怪的 port 呢?这个 port 有什么作用呢?! 

由于每种网络的服务功能都不相同,因此有必要将不同的封包送给不同的服务来处理,所以啰,当你的主机同时开启了 FTP 与 WWW 服务的时候,那么别人送来的资料封包,就会依照 TCP 上面的 port 号码来给 FTP 这个服务或者是 WWW 这个服务来处理,当然就不会搞乱啰!(注:嘿嘿!有些很少接触到网络的朋友,常常会问说:『咦!为什么你的计算机同时有 FTP、WWW、E-Mail 这么多服务,但是人家传资料过来,你的计算机怎么知道如何判断?计算机真的都不会误判吗?!』现在知道为什么了吗?!对啦!就是因为 port 不同嘛!你可以这样想啦,有一天,你要去银行存钱,那个银行就可以想成是『主机』,然后,银行当然不可能只有一种业务,里头就有相当多的窗口,那么你一进大门的时候,在门口的服务人员就会问你说:『嗨!你好呀!你要做些什么事?』你跟他说:『我要存钱呀!』,服务员接着就会告诉你:『喝!那么请前往三号窗口!那边的人员会帮您服务!』这个时候你总该不会往其它的窗口跑吧?! ^_^/"/"这些窗口就可以想成是『 port 』啰!所以啦!每一种服务都有特定的 port 在监听!您无须担心计算机会误判的问题呦!)
 

· 每一个 TCP 联机都必须由一端(通常为 client )发起请求这个 port 通常是随机选择大于 1024 以上的 port 号来进行!其 TCP 封包会将(且只将) SYN 旗标设定起来!这是整个联机的第一个封包;
 

· 如果另一端(通常为 Server ) 接受这个请求的话(当然啰,特殊的服务需要以特殊的 port 来进行,例如 FTP 的 port 21 ),则会向请求端送回整个联机的第二个封包!其上除了 SYN 旗标之外同时还将 ACK 旗标也设定起来,并同时时在本机端建立资源以待联机之需;
 

· 然后,请求端获得服务端第一个响应封包之后,必须再响应对方一个确认封包,此时封包只带 ACK 旗标(事实上﹐后继联机中的所有封包都必须带有 ACK 旗标)﹔
 

· 只有当服务端收到请求端的确认( ACK )封包(也就是整个联机的第三个封包)之后﹐两端的联机才能正式建立。这就是所谓的 TCP 联机的/'三段式交握( Three-Way Handshake )/'的原理。
 

  经过三向交握之后,呵呵!你的 client 端的 port 通常是高于 1024 的随机取得的 port 至于主机端则视当时的服务是开启哪一个 port 而定,例如 WWW 选择 80 而 FTP 则以 21 为正常的联机信道!
 

总而言之,我们这里所说的端口,不是计算机硬件的I/O端口,而是软件形式上的概念.工具提供服务类型的不同,端口分为两种,一种是TCP端口,一种是UDP端口。计算机之间相互通信的时候,分为两种方式:一种是发送信息以后,可以确认信息是否到达,也就是有应答的方式,这种方式大多采用TCP协议;一种是发送以后就不管了,不去确认信息是否到达,这种方式大多采用UDP协议。对应这两种协议姆裉峁┑亩丝冢簿头治猅CP端口和UDP端口。
 
那么,如果攻击者使用软件扫描目标计算机,得到目标计算机打开的端口,也就了解了目标计算机提供了那些服务。我们都知道,提供服务就一定有服务软件的漏洞,根据这些,攻击者可以达到对目标计算机的初步了解。如果计算机的端口打开太多,而管理者不知道,那么,有两种情况:一种是提供了服务而管理者没有注意,比如安装IIS的时候,软件就会自动增加很多服务,而管理员可能没有注意到;一种是服务器被攻击者安装木马,通过特殊的端口进行通信。这两种情况都是很危险的,说到底,就是管理员不了解服务器提供的服务,减小了系统安全系数。
#11 

第十个:什么是扫描 (希望大家主动提出想了解什么?)



如果你的机子连入互联网,那么你就有被扫描的危险。这里要给大家介绍的就是:什么是扫描,为什么有人要扫描,以及有趣的秘密握手机制和不同的扫描技术。 

  扫描一个系统或者一个网络,通常是为了发现这个被扫描的对象在提供哪些服务。扫描者可以分成两种类型,一种是“好人”:比如系统管理员和网络安全顾问,他们扫描的目的纯粹是外了找出系统的缺陷或漏洞,进而想办法弥补。当然另一类的就只能是“坏人”了,比如有“脚本小孩”或者更“坏”的,他们的目的是为了找出漏洞,进而实施攻击。
 

  扫描就象是去一栋公寓然后挨家敲门看谁在家。你是否在运行一个WEB服务器,或者邮件服务器、BIND、Telnet、FTP、RPC等等。这些问题的答案扫描都可以给出。遗憾的是,这些答案通常很明显的暴露在外,使得那些技术不是很高明的人可以轻而易举的进去“参观”。
 

  当然,我这里指的并非是那些极为高明,技术顶尖的黑客,我指的是那些只知道如何从网络上下载文件或收发EMAIL的大学生,当然中学生也不例外,他们通常被称为“脚本孩子”,因为他们并没有高深的技术知识作后盾,仅仅是通过运行别人写出的脚本程序来扫描或攻击别人的系统。 除了这些可以随意下载的脚本外,攻击者通常还会下载一个叫做端口扫描器的软件工具。这种工具较旧的比如有ISS,较新的则如NMAP2.54的BETA22.1等。如果攻击者可以在你的系统中找到一个明显的漏洞,那么完了,你的系统很快将会属于他了,而且,扫描并不犯法,它并不是抢劫,你还无处申诉。
 

  如今,“坏人”的扫描通常会遇到这样的问题,就是他们扫描过的系统往往会记录扫描行为所利用的每一个连接信息,或许扫描的人的确很浅薄,没有意识到在他们扫描过程中会在系统中留下“犯罪”的记录,但稍微留意的人都会想法抹除他们的犯罪记录。有很多方法可以达到这个目的。比如,许多黑客通过他预先攻击过的主机来扫描远程主机,这样,即使被扫描的主机记录了这一信息,逆向搜索的人能知道的也仅限于黑客预先攻击过的主机,真正的黑客信息并不能找到。这里介绍的秘密扫描就属于这样一种扫描方式,它使得逆向搜索变的更为困难,因为它的工作机制甚至不需要建立连接。
 

  为了理解什么是秘密扫描以及它的工作原理,你首先应该对TCP/IP数据包的内容以及TCP的秘密握手机制有所了解。除了携带发送和接收方的IP地址和端口号外,TCP的报头还包含一个序列号和一些起着特殊作用的标记位。这里仅提到其中的三个标记位:SYN,ACK和FIN。因为它们三个的作用与这里讨论的主题密切相关。
 

  当系统间彼此说“HELLO”或道“GOODBYE”时,就会用到所谓的握手机制。让我们先看看如何利用TCP/IP的握手机制来建立一个连接。本文中所提到的连接均指的是发生在两个IP地址间,有一定的端口号的连接。当你想网上冲浪,或者想TELNET到远程主机时,三次握手机制就会为你生成一个这样的连接。
 

  它的工作原理大致如下:握手的第一步,一台计算机首先请求和另外一台计算机建立连接,它通过发送一个SYN请求来完成,也即将前面提到的SYN标记位置位。消息的内容就象是说:“HI,听着,我想和你的机子端口X上的服务说话,咱们先同步一下,我用序列号Y来开始连接。” 端口X表示了连接的服务类型。至于哪些端口支持哪些类型的服务,可以参考UNIX下面的/etc/services文件。两台计算机间的每条信息都有一个由发送方产生的序列号,序列号的使用使得双方知道他们之间是同步的,而且还可以起到丢失信息时或接收顺序错误时发送警告信息的作用。
 

  握手的第二步,接收到SYN请求的计算机响应发送来的序列号,它会将ACK标记位置位,同时它也提供自己的序列号,这个做法类似于说:OH,亲爱的,我已经收到了你的号码,这是我的号码。
 

  到现在为止,发起连接建立请求的计算机认为连接已经建立起来,然而对方却并不这样认为,对方还要等到它自己的序列号有了应答后才能确认连接建立起来。因此现在的状态可以称为“半连接”。如果发起连接请求的计算机不对收到的序列号作出应答,那么这个连接就永远也建立不起来,而正因为没有建立连接,所以系统也不会对这次连接做任何记录。
 

  握手的第三步,发起连接请求的计算机对收到的序列号作出应答,这样,两台计算机之间的连接才算建立起来。
 

  两台计算机说”GOODBYE“时的握手情况与此类似:当一台计算机说没有更多的数据需要发送了,它发送一个FIN信号(将FIN标记位置位)通知另一端,接收到FIN的另一端计算机可能发送完了数据,也可能没发送完,但它会对此作出应答,而当它真正完成所有需要发送的数据后,它会再发送一个自己的FIN信号,等对方对此作出应答后,连接才彻底解除。
 

FIN秘密扫描的工作原理就是向它的目的地一个根本不存在的连接发送FIN信息,如果这项服务没有开,那么目的地会响应一条错误信息,但如果是有这项服务,那么它将忽略这条消息。这样,扫描者的问题“你运行X吗”就有了答案,而且还不会在系统中有所记录。
 

  还有两种其他的扫描手段值得注意。一种叫做圣诞树扫描,因为,它将所有的标记位都置位(不仅仅是SYN,ACK,FIN);另一种叫做空扫描,因为所有的标记位都被复位。这些秘密的扫描行为将会根据接收端所运行的平台不同而产生不同的错误响应信息。
 

  现代的端口扫描工具,象NMAP就是利用这样的原理来检测在一个系统上有那些服务是开着的。NMAP不光是最著名的,同时也是最出色的端口扫描工具。它被系统管理人员和“坏人”们广泛的应用,有关NMAP的介绍,大家可以通过搜索引擎去查找相关的资料。
 

++++++++不过对于扫描工具来说,菜鸟们用Scan和流光比较简单,功能也不错!+++++++++
#12 

第十一个:什么是钩子函数


WINDOWS的钩子函数可以认为是WINDOWS的主要特性之一。利用它们,您可以捕捉您自己进程或其它进程发生的事件。通过“钩挂”,您可以给WINDOWS一个处理或过滤事件幕氐骱煤步凶觥肮匙雍保泵看畏⑸行巳さ氖录保琖INDOWS都将调用该函数。一共有两种类型的钩子:局部的和远程的。 
局部钩子仅钩挂您自己进程的事件。
 
远程的钩子还可以将钩挂其它进程发生的事件。远程的钩子又有两种:
 
基于线程的 它将捕获其它进程中某一特定线程的事件。简言之,就是可以用来观察其它进程中的某一特定线程将发生的事件。
 
系统范围的 将捕捉系统中所有进程将发生的事件消息。 当您创建一个钩子时,WINDOWS会先在内存中创建一个数据结构,该数据结构包含了钩子的相关信息,然后把该结构体加到已经存在的钩子链表中去。新的钩子将加到老的前面。当一个事件发生时,如果您安装的是一个局部钩子,您进程中的钩子函数将被调用。如果是一个远程钩子,系统就必须把钩子函数插入到其它进程的地址空间,要做到这一点要求钩子函数必须在一个动态链接库中,所以如果您想要使用远程钩子,就必须把该钩子函数放到动态链接库中去。当然有两个例外:工作日志钩子和工作日志回放钩子。这两个钩子的钩子函数必须在安装钩子的线程中。原因是:这两个钩子是用来监控比较底层的硬件事件的,既然是记录和回放,所有的事件就当然都是有先后次序的。所以如果把回调函数放在DLL中,输入的事件被放在几个线程中记录,所以我们无法保证得到正确的次序。故解决的办法是:把钩子函数放到单个的线程中,譬如安装钩子的线程。
 
钩子一共有14种,以下是它们被调用的时机:
 
WH_CALLWNDPROC 当调用SendMessage时
 
WH_CALLWNDPROCRET 当SendMessage的调用返回时
 
WH_GETMESSAGE 当调用GetMessage 或 PeekMessage时
 
WH_KEYBOARD 当调用GetMessage 或 PeekMessage 来从消息队列中查询WM_KEYUP 或 WM_KEYDOWN 消息时
 
WH_MOUSE 当调用GetMessage 或 PeekMessage 来从消息队列中查询鼠标事件消息时
 
WH_HARDWARE 当调用GetMessage 或 PeekMessage 来从消息队列种查询非鼠标、键盘消息时
 
WH_MSGFILTER 当对话框、菜单或滚动条要处理一个消息时。该钩子是局部的。它时为那些有自己的消息处理过程的控件对象设计的。
 
WH_SYSMSGFILTER 和WH_MSGFILTER一样,只不过是系统范围的
 
WH_JOURNALRECORD 当WINDOWS从硬件队列中获得消息时
 
WH_JOURNALPLAYBACK 当一个事件从系统的硬件输入队列中被请求时
 
WH_SHELL 当关于WINDOWS外壳事件发生时,譬如任务条需要重画它的按钮

WH_CBT 当基于计算机的训练(CBT)事件发生时
 
WH_FOREGROUNDIDLE 由WINDOWS自己使用,一般的应用程序很少使用
 
WH_DEBUG 用来给钩子函数除错
 

附:如何使用钩子函数(接收到字母A按下时,窗体由最小化弹出的完整的代码)
 
Public Declare Function CallNextHookEx Lib /"user32/" _ 
(ByVal hHook As Long, _ 
ByVal nCode As Long, _ 
ByVal wParam As Long, _ 
ByVal lParam As Long) As Long 

Public Declare Function UnhookWindowsHookEx Lib /"user32/" _ 
(ByVal hHook As Long) As Long 

Public Declare Function SetWindowsHookEx Lib /"user32/" _ 
Alias /"SetWindowsHookExA/" _ 
(ByVal idHook As Long, _ 
ByVal lpfn As Long, _ 
ByVal hmod As Long, _ 
ByVal dwThreadId As Long) As Long 


Public Const WH_KEYBOARD = 2 

Public Const KEY_WINSTART = 91 
Public Const KEY_WINMENU = 93 


Global hHook As Long 

Public Function KeyboardProc(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long 
If nCode >= 0 Then 
If wParam = KEY_WINMENU Or wParam = KEY_WINSTART Then 
If (lParam And &HC0000000) = 0 Then 
MsgBox /"/", , /"/" 
KeyboardProc = 1 
Exit Function 
End If 
End If 
End If 
KeyboardProc = CallNextHookEx(hHook, nCode, wParam, lParam) 
End Function 

Option Explicit 


Private Sub Command1_Click() 
Form2.Show 1 

End Sub 

Private Sub Form_Load() 
hHook = SetWindowsHookEx(WH_KEYBOARD, AddressOf KeyboardProc, 0&, App.ThreadID) 
Me.Show 
End Sub 

Private Sub Form_Unload(Cancel As Integer) 
Call UnhookWindowsHookEx(hHook) 
End Sub
第十二个:什么是加壳和脱壳!



加壳:其实是利用特殊的算法,对EXE、DLL文件里的资源进行压缩。类似WINZIP 的效果,只不过这个压缩之后的文件,可以独立运行,解压过程完全隐蔽,都在内存中完成。解压原理,是加壳工具在文件头里加了一段指令,告诉CPU,怎么才能解压自己。现在的CPU都很快,所以这个解压过程你看不出什么东东。软件一下子就打开了,只有你机器配置非常差,才会感觉到不加壳和加壳后的软件运行速度的差别。当你加壳时,其实就是给可执行的文件加上个外衣。用户执行的只是这个外壳程序。当你执行这个程序的时候这个壳就会把原来的程序在内存中解开,解开后,以后的就交给真正的程序。所以,这些的工作只是在内存中运行的,是不可以了解具体是怎么样在内存中运行的。通常说的对外壳加密,都是指很多网上免费或者非免费的软件,被一些专门的加壳程序加壳,基本上是对程序的压缩或者不压缩。因为有的时候程序会过大,需要压缩。但是大部分的程序是因为防止反跟踪,防止程序被人跟踪调试,防止算法程序不想被别人静态分析。加密代码和数据,保护你的程序数据的完整性。不被修改或者窥视你程序的内幕。 


脱壳,是完全破除压缩后软件无法编辑的限制,去掉头部的解压缩指令,然后解压出加壳前的完整软件。这样,你就可以对其“动刀”了。呵呵~~当然是和加壳相反哟。从字面上也该明白了吧,我就不多说了~~
#14 

第十三个:什么是代理服务器


代理有很多种解释,而我们常常提到的代理,从计算机专业角度来说就是指代理服务器相关,针对syx-kn 的提问,我先把代理服务器向大家简单的介绍一下吧!! 
代理服务器英文全称是Proxy Server,其功能就是代理网络用户去取得网络信息。形象的说:它是网络信息的中转站。在一般情况下,我们使用网络浏览器直接去连接其他Internet站点取得网络信息时,须送出Request信号来得到回答,然后对方再把信息以bit方式传送回来。代理服务器是介于浏览器和Web服务器之间的一台服务器,有了它之后,浏览器不是直接到Web服务器去取回网页而是向代理服务器发出请求,Request信号会先送到代理服务器,由代理服务器来取回浏览器所需要的信息并传送给你的浏览器。而且,大部分代理服务器都具有缓冲的功能,就好象一个大的Cache,它有很大的存储空间,它不断将新取得数据储存到它本机的存储器上,如果浏览器所请求的数据在它本机的存储器上已经存在而且是最新的,那么它就不重新从Web服务器取数据,而直接将存储器上的数据传送给用户的浏览器,这样就能显著提高浏览速度和效率。更重要的是:Proxy Server (代理服务器)是 Internet链路级网关所提供的一种重要的安全功能,它的工作主要在开放系统互联 (OSI) 模型的对话层。
 
  代理服务器(Proxy Server)就是个人网络和因特网服务商之间的中间代理机构,它负责转发合法的网络信息,并对转发进行控制和登记。在使用网络浏览器浏览网络信息的时候,如果使用代理服务器,浏览器就不是直接到Web服务器去取回网页,而是向代理服务器发出请求,由代理服务器取回浏览器所需要的信息。目前使用的因特网是一个典型的客户机/服务器结构,当用户的本地机与因特网连接时,通过本地机的客户程序比如浏览器或者软件下载工具发出请求,远端的服务器在接到请求之后响应请求并提供相应的服务。
 
  代理服务器处在客户机和服务器之间,对于远程服务器而言,代理服务器是客户机,它向服务器提出各种服务申请;对于客户机而言,代理服务器则是服务器,它接受客户机提出的申请并提供相应的服务。也就是说,客户机访问因特网时所发出的请求不再直接发送到远程服务器,而是被送到了代理服务器上,代理服务器再向远程的服务器提出相应的申请,接收远程服务器提供的数据并保存在自己的硬盘上,然后用这些数据对客户机提供相应的服务。
 

讲了这么多,其实对于菜鸟们所提的代理,主要是应用,这里我再附加上设置代理服务器的方法:
 
IE4.01:菜单栏“查看”-> 下拉菜单“Internet选项”-> 选项卡“连接”-> 在“代理服务器”一栏选中“通过代理服务器访问Internet”,输入地址和端口号。-> 确定。
 

IE 5.0:菜单栏“工具”-> 下拉菜单“Internet选项”-> 选项卡“连接”-> 在“拨号设置”中选中您目前使用的连接,然后点击右侧的“设置”-> 在中间的“代理服务器”栏选中“使用代理服务器”-> 在“地址”和“端口”栏输入HTTP代理服务器地址和端口-> 确定 -> 确定。
#15 

第十四个:什么是协议


协议就是对计算机之间连接的信息格式、能被收/发双方接受的传送信息内容的一组定义。协议有“多层”结构,高层协议如IPX或TCP/IP负责点到点传送信息包,较低层协议提供专门的信息和命令允许系统操作。

#16 

第十五个:什么是数据包


 “包”(Packet)是TCP/IP协议通信传输中的数据单位,一般也称“数据包”。有人说,局域网中传输的不是“帧”(Frame)吗?没错,但是TCP/IP协议是工作在OSI模型第三层(网络层)、第四层(传输层)上的,而帧是工作在第二层(数据链路层)。上一层的内容由下一层的内容来传输,所以在局域网中,“包”是包含在“帧”里的。 
 名词解释:OSI(Open System Interconnection,开放系统互联)模型是由国际标准化组织(ISO)定义的标准,它定义了一种分层体系结构,在其中的每一层定义了针对不同通信级别的协议。OSI模型有7层,17层分别是:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。OSI模型在逻辑上可分为两个部分:低层的14层关注的是原始数据的传输;高层的57层关注的是网络下的应用程序。
 

  我们可以用一个形象一些的例子对数据包的概念加以说明:我们在邮局邮寄产品时,虽然产品本身带有自己的包装盒,但是在邮寄的时候只用产品原包装盒来包装显然是不行的。必须把内装产品的包装盒放到一个邮局指定的专用纸箱里,这样才能够邮寄。这里,产品包装盒相当于数据包,里面放着的产品相当于可用的数据,而专用纸箱就相当于帧,且一个帧中只有一个数据包。
 

  “包”听起来非常抽象,那么是不是不可见的呢?通过一定技术手段,是可以感知到数据包的存在的。比如在Windows 2000 Server中,把鼠标移动到任务栏右下角的网卡图标上(网卡需要接好双绞线、连入网络),就可以看到“发送:××包,收到:××包”的提示。通过数据包捕获软件,也可以将数据包捕获并加以分析。
 

(见:附件图)就是用数据包捕获软件Iris捕获到的数据包的界面图,在此,大家可以很清楚地看到捕获到的数据包的MAC地址、IP地址、协议类型端口号等细节。通过分析这些数据,网管员就可以知道网络中到底有什么样的数据包在活动了。
 

附:
 
数据包的结构
 
  数据包的结构非常复杂,不是三言两语能够说清的,在这里我们主要了解一下它的关键构成就可以了,这对于理解TCP/IP协议的通信原理是非常重要的。数据包主要由“目的IP地址”、“源IP地址”、“净载数据”等部分构成。
 
 数据包的结构与我们平常写信非常类似,目的IP地址是说明这个数据包是要发给谁的,相当于收信人地址;源IP地址是说明这个数据包是发自哪里的,相当于发信人地址;而净载数据相当于信件的内容。
 
  正是因为数据包具有这样的结构,安装了TCP/IP协议的计算机之间才能相互通信。我们在使用基于TCP/IP协议的网络时,网络中其实传递的就是数据包。理解数据包,对于网络管理的网络安全具有至关重要的意义。

第十六个:什么是IPX


IPX(Internetwork Packet eXchange‘网络报文分组交换’)是Novell公司用于Netware网络操作系统的通信协议。基于此协议可实现客户机/服务器模式的局域网,因此在局域网领域被广泛采用。随着Internet和Intranet的迅速发展,这种协议将被Internet的基本通信协议TCP/IP协议取代,因为采用TCP/IP协议可建立更加简单而统一的信息交换平台。
#18 

第十七个:什么是Internet/Intranet


Internet(国际互联网)是一个由各种不同类型和规模的独立运行与管理的计算机网络组成的全球范围的计算机网络。组成Internet的计算机网络包括局域网(LAN)、城域网(MAN)以及大规模的广域网(WAN)等。这些网络通过普通电话线、高速率专用线路、卫星、微波和光缆等通信线路把不同国家的大学、公司、科研机构以及军事和政府等组织的网络连接起来。Internet网络互连采用的基本协议是TCP/IP。
 
任何一个地方的任意一个Internet用户都可以从Internet中获得任何方面的信息,如自然、社会、政治、历史、科技、教育、卫生、娱乐、政治决策、金融、商业和天气预报等等。
 

Intranet(内部网)指采用Internet技术建立的企业内部专用网络。它以TCP/IP协议作为基础,以Web为核心应用,构成统一各便利的信息交换平台。Intranet可实现的功能极为广泛和强大。
19  

第十七个:什么是 IRC Internet 转播交谈)?


IRC
Internet Relay Chat )是一种基于 Internet 的通信协议,中文一般莆チ屑塘奶臁K怯煞依 ? Jarkko Oikarinen 1988 年首创的一种网络聊天协议。经过十年的发展,目前世界上有超过 60 个国家提供了 IRC 的服务。在人气最旺的 EFnet 上,您可以看到上万的使用者在同一时间使用 IRC  
IRC
采用客户机 / 服务器模式, 它能使 Internet 用户实时地与其他用户交谈,每个用户通过客户端程序与远程主机建立连接,远程主机接受多个来自客户端程序的连接,并实现多个用户之间的实时通话。在海湾战争期间, IRC 受到了全世界的关注。当时以色列特拉维夫的居民们在空袭期间通过 IRC 方式,向世界各地的听众现场描述所发生的事件。  
IRC
的工作原理非常简单,您只要在自己的 PC 上运行客户端软件,然后通过因特网以  IRC 协议连接到一台 IRC 服务器上即可。它的特点是速度非常之快,聊天时几乎没有延迟的现象,并且只占用很小的带宽资源。所有用户可以在一个被称为 ///"Channel///"( 频道 ) 的地方 就某一话题进行交谈或密谈。每个 IRC 的使用者都有一个 Nickname( 昵称 ) ,所有的沟通就在他们所在的 Channel 内以不同的 Nickname 进行交谈。  
IRC
工具中国际上比较好用的是英文的 mirc, 在国内,比较好用的是中文的 Chatkey 。你可以到有关的网站下载。 mirc 的网址为: http://www.mirc.com ( 英文 ) Chatkey 的网址是 http://www.chatkey.com ( 中文 ) 。这里以中文的 Chatkey 为例,带你玩转 IRC
第十八个:什么是 Ping


Ping 是个使用频率极高的实用程序,用于确定本地主机是否能与另一台主机交换(发送与接收)数据报。根据返回的信息,你就可以推断 TCP/IP 参数是否设置得正确以及运行是否正常。需要注意的是:成功地与另一台主机进行一次或两次数据报交换并不表示 TCP/IP 配置就是正确的,你必须执行大量的本地主机与远程主机的数据报交换,才能确信 TCP/IP 的正确性。  

简单的说, Ping 就是一个测试程序,如果 Ping 运行正确,你大体上就可以排除网络访问层、网卡、 MODEM 的输入输出线路、电缆和路由器等存在的故障,从而减小了问题的范围。但由于可以自定义所发数据报的大小及无休止的高速发送, Ping 也被某些别有用心的人作为 DDOS (拒绝服务攻击)的工具,曾经 Yahoo 就是被黑客利用数百台可以高速接入互联网的电脑连续发送大量 Ping 数据包而瘫痪的。  

按照缺省设置, Windows 上运行的 Ping 命令发送 4 ICMP (网间控制报文协议)回颓肭螅扛 ?2 字节数据,如果一切正常,你应能得到 4 个回送应答。  

 Ping 能够以毫秒为单位显示发送回送请求到返回回送应答之间的时间量。如果应答时间短,表示数据报不必通过太多的路由器或网络连接速度比较快。 Ping 还能显示 TTL Time To Live 存在时间)值,你可以通过 TTL 值推算一下数据包已经通过了多少个路由器:源地点 TTL 起始值(就是比返回 TTL 略大的一个 2 的乘方数) - 返回时 TTL 值。例如,返回 TTL 值为 119 ,那么可以推算数据报离开源地址的 TTL 起始值为 128 ,而源地点到目标地点要通过 9 个路由器网段( 128-119 );如果返回 TTL 值为 246 TTL 起始值就是 256 ,源地点到目标地点要通过 9 个路由器网段。  

通过 Ping 检测网络故障的典型次序  

正常情况下,当你使用 Ping 命令来查找问题所在或检验网络运行情况时,你需要使用许多 Ping 命令,如果所有都运行正确,你就可以相信基本的连通性和配置参数没有问题;如果某些 Ping 命令出现运行故障,它也可以指明到何处去查找问题。下面就给出一个典型的检测次序及对应的可能故障:  

ping 127.0.0.1--
这个 Ping 命令被送到本地计算机的 IP 软件,该命令永不退出该计算机。如果没有做到这一点,就表示 TCP/IP 的安装或运行存在某些最基本的问题。  

ping 
本机 IP-- 这个命令被送到你计算机所配置的 IP 地址,你的计算机始终都应该对该 Ping 命令作出应答,如果没有,则表示本地配置或安装存在问题。出现此问题时,局域网用户请断开网络电缆,然后重新发送该命令。如果网线断开后本命令正确,则表示另一台计算机可能配置了相同的 IP 地址。  

ping 
局域网内其他 IP-- 这个命令应该离开你的计算机,经过网卡及网络电缆到达其他计算机,再返回。收到回送应答表明本地网络中的网卡和载体运行正确。但如果收到 0 个回送应答,那么表示子网掩码(进行子网分割时,将 IP 地址的网络部分与主机部分分开的代码)不正确或网卡配置错误或电缆系统有问题。  

ping 
网关 IP-- 这个命令如果应答正确,表示局域网中的网关路由器正在运行并能够作出应答。  

ping 
远程 IP-- 如果收到 4 个应答,表示成功的使用了缺省网关。对于拨号上网用户则表示能够成功的访问 Internet (但不排除 ISP DNS 会有问题)。  

ping localhost--localhost
是个作系统的网络保留名,它是 127.0.0.1 的别名,每太计算机都应该能够将该名字转换成该地址。如果没有做到这一带内,则表示主机文件( /Windows/host )中存在问题。  

ping www.yahoo.com--
对这个域名执行 Ping ... 是通过 DNS 服务器 如果这里出现故障,则表示 DNS 服务器的 IP 地址配置不正确或 DNS 服务器有故障(对于拨号上网用户,某些 ISP 已经不需要设置 DNS 服务器了)。顺便说一句:你也可以利用该命令实现域名对 IP 地址的转换功能。  

如果上面所列出的所有 Ping 命令都能正常运行,那么你对你的计算机进行本地和远程通信的功能基本上就可以放心了。但是,这些命令的成功并不表示你所有的网络配置都没有问题,例如,某些子网掩码错误就可能无法用这些方法检测到。  

Ping
命令的常用参数选项  

ping IP -t--
连续对 IP 地址执行 Ping 命令,直到被用户以 Ctrl+C 中断。  

ping IP -l 2000--
指定 Ping 命令中的数据长度为 2000 字节,而不是缺省的 32 字节。  

ping IP -n--
执行特定次数的 Ping 命令。
第十九个:什么是代码


代码是一组有序的数字或字母的排列,是代表客观实体及其属性的符号。  

代码设计的原则包括惟一确定性、标准化和通用性、可扩充性与稳定性、便于识别与记忆、力求短小与格式统一以及容易修改等。

第二十个:什么是系统的进程



我先让朋友们了解一下在任务管理器里的进程。其实在谈到进程时,还要涉及到线程的概念。 进程是指在系统中正在运行的一个应用程序;线程是系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元。对于操 作系统而言,其调度单元是线程。一个进程至少包括一个线程,通常将该线程称为主线程。一个进程从主线程的执行开始进而创建一个或多个附加线程,就是所谓基于多线程的多任务。  
那进程与线程的区别到底是什么?进程是执行程序的实例。例如,当你运行记事本程序( Nodepad )时,你就创建了一个用来容纳组成 Notepad.exe 的代码及其所需调用动态链接库的进程。每个进程均运行在其专用且受保护的地址空间内。因此,如果你同时运行记事本的两个拷贝,该程序正在使用的数据在各自实例中是彼此独立的。在记事本的一个拷贝中将无法看到该程序的第二个实例打开的数据。  
我这里以沙箱为例进行阐述。一个进程就好比一个沙箱。线程就如同沙箱中的孩子们。孩子们在沙箱子中跑来跑去,并且可能将沙子攘到别的孩子眼中,他们会互相踢打或撕咬。但是,这些沙箱略有不同之处就在于每个沙箱完全由墙壁和顶棚封闭起来,无论箱中的孩子如何狠命地攘沙,他们也不会影响到其它沙箱中的其他孩子。因此,每个进程就象一个被保护起来的沙箱。未经许可,无人可以进出。  
实际上线程运行而进程不运行。两个进程彼此获得专用数据或内存的唯一途径就是通过协议来共享内存块。这是一种协作策略。下面让我们分析一下任务管理器里的进程选项卡。  
这里的进程是指一系列进程,这些进程是由它们所运行的可执行程序实例来识别的,这就是进程选项卡中的第一列给出了映射名称的原因。请注意,这里并没有进程名称列。进程并不拥有独立于其所归属实例的映射名称。换言之,如果你运行 5 个记事本拷贝,你将会看到 5 个称为 Notepad.exe 的进程。它们是如何彼此区别的呢?其中一种方式是通过它们的进程 ID ,因为每个进程都拥有其独一无二的编码。该进程 ID Windows NT Windows 2000 生成,并可以循环使用。因此,进程 ID 将不会越编越大,它们能够得到循环利用。  

第三列是被进程中的线程所占用的 CPU 时间百分比。它不是 CPU 的编号,而是被进程占用的 CPU 时间百分比。此时我的系统基本上是空闲的。尽管系统看上去每一秒左右都只使用一小部分 CPU 时间,但该系统空闲进程仍旧耗用了大约 99% CPU 时间。  

第四列, CPU 时间,是 CPU 被进程中的线程累计占用的小时、分钟及秒数。请注意,我对进程中的线程使用占用一词。这并不一定意味着那就是进程已耗用的 CPU 时间总和,因为,如我们一会儿将看到的, NT 计时的方式是,当特定的时钟间隔激发时,无论谁恰巧处于当前的线程中,它都将计算到 CPU 周期之内。通常情况下,在大多数 NT 系统中,时钟以 10 毫秒的间隔运行。每 10 毫秒 NT 的心脏就跳动一下。有一些驱动程序代码片段运行并显示谁是当前的线程。让我们将 CPU 时间的最后 10 毫秒记在它的帐上。因此,如果一个线程开始运行,并在持续运行 8 毫秒后完成,接着,第二个线程开始运行并持续了 2 毫秒,这时,时钟激发,请猜一猜这整整 10 毫秒的时钟周期到底记在了哪个线程的帐上?答案是第二个线程。因此, NT 中存在一些固有的不准确性,而 NT 恰是以这种方式进行计时,实际情况也如是,大多数 32 位操作系统中都存在一个基于间隔的计时机制。请记住这一点,因为,有时当你观察线程所耗用的 CPU 总和时,会出现尽管该线程或许看上去已运行过数十万次,但其 CPU 时间占用量却可能是零或非常短暂的现象,那么,上述解释便是原因所在。上述也就是我们在任务管理器的进程选项卡中所能看到的基本信息列。  


说到这里 , 我想大家对进程有一定的认识了吧 , 最后我对平时见到的各进程项细述一下 , 有哪些是能关的 , 有哪些是不能关的 ........ 

最基本的系统进程(也就是说,这些进程是系统运行的基本条件,有了这些进程,系统就能正常运行)
smss.exe Session Manager 
csrss.exe 
子系统服务器进程  
winlogon.exe 
管理用户登录  
services.exe 
包含很多系统服务  
lsass.exe 
管理  IP  安全策略以及启动  ISAKMP/Oakley (IKE)   IP  安全驱动程序。 ( 系统服务
产生会话密钥以及授予用于交互式客户 / 服务器验证的服务凭据 (ticket) ( 系统服务
svchost.exe 
包含很多系统服务  
svchost.exe 
SPOOLSV.EXE 
将文件加载到内存中以便迟后打印。 ( 系统服务
explorer.exe 
资源管理器  
internat.exe 
托盘区的拼音图标  
附加的系统进程(这些进程不是必要的,你可以根据需要通过服务管理器来增加或减少)
mstask.exe 
允许程序在指定时间运行。 ( 系统服务
regsvc.exe 
允许远程注册表操作。 ( 系统服务
winmgmt.exe 
提供系统管理信息 ( 系统服务 )  
inetinfo.exe 
通过  Internet  信息服务的管理单元提供  FTP  连接和管理。 ( 系统服务
tlntsvr.exe 
允许远程用户登录到系统并且使用命令行运行控制台程序。 ( 系统服务
允许通过  Internet  信息服务的管理单元管理  Web   FTP  服务。 ( 系统服务
tftpd.exe 
实现  TFTP Internet  标准。该标准不要求用户名和密码。远程安装服务的一部分。 ( 系统服务
termsrv.exe 
提供多会话环境允许客户端设备访问虚拟的  Windows 2000 Professional  桌面会话以及运行在服务器上的基  
 Windows  的程序。 ( 系统服务
dns.exe 
应答对域名系统 (DNS) 名称的查询和更新请求。 ( 系统服务
以下服务很少会用到,上面的服务都对安全有害,如果不是必要的应该关掉  
tcpsvcs.exe 
提供在  PXE  可远程启动客户计算机上远程安装  Windows 2000 Professional  的能力。 ( 系统服务
支持以下  TCP/IP  服务: Character Generator, Daytime, Discard, Echo,  以及  Quote of the Day ( 系统服务
ismserv.exe 
允许在  Windows Advanced Server  站点间发送和接收消息。 ( 系统服务
ups.exe 
管理连接到计算机的不间断电源 (UPS) ( 系统服务
wins.exe 
为注册和解析  NetBIOS  型名称的  TCP/IP  客户提供  NetBIOS  名称服务。 ( 系统服务
llssrv.exe License Logging Service(system service) 
ntfrs.exe 
在多个服务器间维护文件目录内容的文件同步。 ( 系统服务
RsSub.exe 
控制用来远程储存数据的媒体。 ( 系统服务
locator.exe 
管理  RPC  名称服务数据库。 ( 系统服务
lserver.exe 
注册客户端许可证。 ( 系统服务
dfssvc.exe 
管理分布于局域网或广域网的逻辑卷。 ( 系统服务
clipsrv.exe 
支持“剪贴簿查看器”,以便可以从远程剪贴簿查阅剪贴页面。 ( 系统服务
msdtc.exe 
并列事务,是分布于两个以上的数据库,消息队列,文件系统,或其它事务保护资源管理器。 ( 系统服务
faxsvc.exe 
帮助您发送和接收传真。 ( 系统服务
cisvc.exe Indexing Service(system service) 
dmadmin.exe 
磁盘管理请求的系统管理服务。 ( 系统服务
mnmsrvc.exe 
允许有权限的用户使用  NetMeeting  远程访问  Windows  桌面。 ( 系统服务
netdde.exe 
提供动态数据交换  (DDE)  的网络传输和安全特性。 ( 系统服务
smlogsvc.exe 
配置性能日志和警报。 ( 系统服务
rsvp.exe 
为依赖质量服务 (QoS) 的程序和控制应用程序提供网络信号和本地通信控制安装功能。 ( 系统服务
RsEng.exe 
协调用来储存不常用数据的服务和管理工具。 ( 系统服务
RsFsa.exe 
管理远程储存的文件的操作。 ( 系统服务
grovel.exe 
扫描零备份存储 (SIS) 卷上的重复文件,并且将重复文件指向一个数据存储点,以节省磁盘空间。 ( 系统服务
SCardSvr.exe 
对插入在计算机智能卡阅读器中的智能卡进行管理和访问控制。 ( 系统服务
snmp.exe 
包含代理程序可以监视网络设备的活动并且向网络控制台工作站汇报。 ( 系统服务
snmptrap.exe 
接收由本地或远程  SNMP  代理程序产生的陷阱消息,然后将消息传递到运行在这台计算机上  SNMP  管理程序  
( 系统服务
UtilMan.exe 
从一个窗口中启动和配置辅助工具。 ( 系统服务
msiexec.exe 
依据  .MSI  文件中包含的命令来安装、修复以及删除软件。 ( 系统服务

详细说明:  


win2k
运行进程  
Svchost.exe 
Svchost.exe
文件对那些从动态连接库中运行的服务来说是一个普通的主机进程名。 Svhost.exe 文件定位  
在系统的 %systemroot%//system32 文件夹下。在启动的时候, Svchost.exe 检查注册表中的位置来构建需要  
加载的服务列表。这就会使多个 Svchost.exe 在同一时间运行。每个 Svchost.exe 的回话期间都包含一组服务,  
以至于单独的服务必须依靠 Svchost.exe 怎样和在那里启动。这样就更加容易控制和查找错误。  
Svchost.exe 
组是用下面的注册表值来识别。  

HKEY_LOCAL_MACHINE//Software//Microsoft//Windows NT//CurrentVersion//Svchost 
每个在这个键下的值代表一个独立的 Svchost 组,并且当你正在看活动的进程时,它显示作为一个单独的  
例子。每个键值都是 REG_MULTI_SZ 类型的值而且包括运行在 Svchost 组内的服务。每个 Svchost 组都包含一个  
或多个从注册表值中选取的服务名,这个服务的参数值包含了一个 ServiceDLL 值。  
HKEY_LOCAL_MACHINE//System//CurrentControlSet//Services//Service 

更多的信息  
为了能看到正在运行在 Svchost 列表中的服务。  
开始-运行-敲入 cmd 
然后在敲入  tlist -s  tlist  应该是 win2k 工具箱里的冬冬)  
Tlist 
显示一个活动进程的列表。开关  -s  显示在每个进程中的活动服务列表。如果想知道更多的关于  
进程的信息,可以敲  tlist pid  

Tlist 
显示 Svchost.exe 运行的两个例子。  
0 System Process 
8 System 
132 smss.exe 
160 csrss.exe Title: 
180 winlogon.exe Title: NetDDE Agent 
208services.exe 
Svcs: AppMgmt,Browser,Dhcp,dmserver,Dnscache,Eventlog,lanmanserver,LanmanWorkstation,LmHosts,Messenger,PlugPlay, 
ProtectedStorage,seclogon,TrkWks,W32Time,Wmi 
220 lsass.exe Svcs: Netlogon,PolicyAgent,SamSs 
404 svchost.exe Svcs: RpcSs 
452 spoolsv.exe Svcs: Spooler 
544 cisvc.exe Svcs: cisvc 
556 svchost.exe Svcs: EventSystem,Netman,NtmsSvc,RasMan,SENS,TapiSrv 
580 regsvc.exe Svcs: RemoteRegistry 
596 mstask.exe Svcs: Schedule 
660 snmp.exe Svcs: SNMP 
728 winmgmt.exe Svcs: WinMgmt 
852 cidaemon.exe Title: OleMainThreadWndName 
812 explorer.exe Title: Program Manager 
1032 OSA.EXE Title: Reminder 
1300 cmd.exe Title: D://WINNT5//System32//cmd.exe - tlist -s 
1080 MAPISP32.EXE Title: WMS Idle 
1264 rundll32.exe Title: 
1000 mmc.exe Title: Device Manager 
1144 tlist.exe 
在这个例子中注册表设置了两个组。  
HKEY_LOCAL_MACHINE//Software//Microsoft//Windows NT//CurrentVersion//Svchost: 
netsvcs: Reg_Multi_SZ: EventSystem Ias Iprip Irmon Netman Nwsapagent Rasauto Rasman Remoteaccess SENS Sharedaccess 
Tapisrv Ntmssvc 
rpcss :Reg_Multi_SZ: RpcSs 

smss.exe 

csrss.exe 

这个是用户模式 Win32 子系统的一部分。 csrss 代表客户 / 服务器运行子系统而且是一个基本的子系统  
必须一直运行。 csrss  负责控制 windows ,创建或者删除线程和一些 16 位的虚拟 MS-DOS 环境。  

explorer.exe 
这是一个用户的 shell (我实在是不知道怎么翻译 shell ),在我们看起来就像任务条,桌面等等。这个  
进程并不是像你想象的那样是作为一个重要的进程运行在 windows 中,你可以从任务管理器中停掉它,或者重新启动。  
通常不会对系统产生什么负面影响。  

internat.exe 

这个进程是可以从任务管理器中关掉的。  
internat.exe
在启动的时候开始运行。它加载由用户指定的不同的输入点。输入点是从注册表的这个位置  
HKEY_USERS//.DEFAULT//Keyboard Layout//Preload 
加载内容的。  
internat.exe 
加载“ EN ”图标进入系统的图标区,允许使用者可以很容易的转换不同的输入点。  
当进程停掉的时候,图标就会消失,但是输入点仍然可以通过控制面板来改变。  

lsass.exe 
这个进程是不可以从任务管理器中关掉的。  
这是一个本地的安全授权服务,并且它会为使用 winlogon 服务的授权用户生成一个进程。这个进程是  
通过使用授权的包,例如默认的 msgina.dll 来执行的。如果授权是成功的, lsass 就会产生用户的进入  
令牌,令牌别使用启动初始的 shell 。其他的由用户初始化的进程会继承这个令牌的。  

mstask.exe 
这个进程是不可以从任务管理器中关掉的。  
这是一个任务调度服务,负责用户事先决定在某一时间运行的任务的运行。  

smss.exe 
这个进程是不可以从任务管理器中关掉的。  
这是一个会话管理子系统,负责启动用户会话。这个进程是通过系统进程初始化的并且对许多活动的,  
包括已经正在运行的 Winlogon Win32 Csrss.exe )线程和设定的系统变量作出反映。在它启动这些  
进程后,它等待 Winlogon 或者 Csrss 结束。如果这些过程时正常的,系统就关掉了。如果发生了什么  
不可预料的事情, smss.exe 就会让系统停止响应(就是挂起)。  

spoolsv.exe 
这个进程是不可以从任务管理器中关掉的。  
缓冲( spooler )服务是管理缓冲池中的打印和传真作业。  

service.exe 
这个进程是不可以从任务管理器中关掉的。  
大多数的系统核心模式进程是作为系统进程在运行。  

System Idle Process 
这个进程是不可以从任务管理器中关掉的。  
这个进程是作为单线程运行在每个处理器上,并在系统不处理其他线程的时候分派处理器的时间。  


winlogon.exe 
这个进程是管理用户登录和推出的。而且 winlogon 在用户按下 CTRL+ALT+DEL 时就激活了,显示安全对话框。  

winmgmt.exe 
winmgmt
win2000 客户端管理的核心组件。当客户端应用程序连接或当管理程序需要他本身的服务时这个进程初始化  

taskmagr.exe 
这个进程当然就是任务管理器了 . 不要忘哟 .
第二十一: TCP/IP 协议介绍  
TCP/IP
的通讯协议  
这部分简要介绍一下 TCP/IP 的内部结构,为讨论与互联网有关的安全问题打下基础。 TCP/IP 协议组之所以流行,部分原因是因为它可以用在各种各样的信道和底层协议(例如 T1 X.25 、以太网以及 RS-232 串行接口)之上。确切地说, TCP/IP 协议是一组包括 TCP 协议和 IP 协议, UDP User Datagram Protocol )协议、 ICMP Internet Control Message Protocol )协议和其他一些协议的协议组。  

TCP/IP
整体构架概述  

TCP/IP
协议并不完全符合 OSI 的七层参考模型。传统的开放式系统互连参考模型,是一种通信协议的 7 层抽象的参考模型 , 其中每一层执行某一特定任务。该模型的目的是使各种硬件在相同的层次上相互通信。这 7 层是 : 物理层、数据链路层、网路层、传输层、话路层、表示层和应用层。而 TCP/IP 通讯协议采用了 4 层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。这 4 层分别为:  

应用层:应用程序间沟通的层,如简单电子邮件传输( SMTP )、文件传输协议( FTP )、网络远程访问协议( Telnet )等。  

传输层:在此层中,它提供了节点间的数据传送服务,如传输控制协议( TCP )、用户数据报协议( UDP )等, TCP UDP 给数据包加入传输数据并把它传输到下一层中,这一层负责传送数据,并且确定数据已被送达并接收。  

互连网络层:负责提供基本的数据封包传送功能,让每一块数据包都能够到达目的主机(但不检查是否被正确接收),如网际协议( IP )。  

网络接口层:对实际的网络媒体的管理,定义如何使用实际网络(如 Ethernet Serial Line 等)来传送数据。  

TCP/IP
中的协议  

以下简单介绍 TCP/IP 中的协议都具备什么样的功能,都是如何工作的:  

1
 IP 

网际协议 IP TCP/IP 的心脏,也是网络层中最重要的协议。  

IP
层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层 ---TCP UDP 层;相反, IP 层也把从 TCP UDP 层接收来的数据包传送到更低层。 IP 数据包是不可靠的,因为 IP 并没有做任何事情来确认数据包是按顺序发送的或者没有被破坏。 IP 数据包中含有发送它的主机的地址(源地址)和接收它的主机的地址(目的地址)。  

高层的 TCP UDP 服务在接收数据包时,通常假设包中的源地址是有效的。也可以这样说, IP 地址形成了许多服务的认证基础,这些服务相信数据包是从一个有效的主机发送来的。 IP 确认包含一个选项,叫作 IP source routing ,可以用来指定一条源地址和目的地址之间的直接路径。对于一些 TCP UDP 的服务来说,使用了该选项的 IP 包好象是从路径上的最后一个系统传递过来的,而不是来自于它的真实地点。这个选项是为了测试而存在的,说明了它可以被用来欺骗系统来进行平常是被禁止的连接。那么,许多依靠 IP 源地址做确认的服务将产生问题并且会被非法入侵。  

2. TCP 

如果 IP 数据包中有已经封好的 TCP 数据包,那么 IP 将把它们向‘上’传送到 TCP 层。 TCP 将包排序并进行错误检查,同时实现虚电路间的连接。 TCP 数据包中包括序号和确认,所以未按照顺序收到的包可以被排序,而损坏的包可以被重传。  

TCP
将它的信息送到更高层的应用程序,例如 Telnet 的服务程序和客户程序。应用程序轮流将信息送回 TCP 层, TCP 层便将它们向下传送到 IP 层,设备驱动程序和物理介质,最后到接收方。  

面向连接的服务(例如 Telnet FTP rlogin X Windows SMTP )需要高度的可靠性,所以它们使用了 TCP DNS 在某些情况下使用 TCP (发送和接收域名数据库),但使用 UDP 传送有关单个主机的信息。  

3.UDP 

UDP
TCP 位于同一层,但对于数据包的顺序错误或重发。因此, UDP 不被应用于那些使用虚电路的面向连接的服务, UDP 主要用于那些面向查询 --- 应答的服务,例如 NFS 。相对于 FTP Telnet ,这些服务需要交换的信息量较小。使用 UDP 的服务包括 NTP (网落时间协议)和 DNS DNS 也使用 TCP )。  

欺骗 UDP 包比欺骗 TCP 包更容易,因为 UDP 没有建立初始化连接(也可以称为握手)(因为在两个系统间没有虚电路),也就是说,与 UDP 相关的服务面临着更大的危险。  

4.ICMP 

ICMP
IP 位于同一层,它被用来传送 IP 的的控制信息。它主要是用来提供有关通向目的地址的路径信息。 ICMP 的‘ Redirect ’信息通知主机通向其他系统的更准确的路径,而‘ Unreachable ’信息则指出路径有问题。另外,如果路径不可用了, ICMP 可以使 TCP 连接‘体面地’终止。 PING 是最常用的基于 ICMP 的服务。  

5. TCP
UDP 的端口结构  

TCP
UDP 服务通常有一个客户 / 服务器的关系,例如,一个 Telnet 服务进程开始在系统上处于空闲状态,等待着连接。用户使用 Telnet 客户程序与服务进程建立一个连接。客户程序向服务进程写入信息,服务进程读出信息并发出响应,客户程序读出响应并向用户报告。因而,这个连接是双工的,可以用来进行读写。  

两个系统间的多重 Telnet 连接是如何相互确认并协调一致呢? TCP UDP 连接唯一地使用每个信息中的如下四项进行确认:  

IP 地址 --- 发送包的 IP 地址。  

目的 IP 地址 --- 接收包的 IP 地址。  

源端口 --- 源系统上的连接的端口。  

目的端口 --- 目的系统上的连接的端口。  

端口是一个软件结构,被客户程序或服务进程用来发送和接收信息。一个端口对应一个 16 比特的数。服务进程通常使用一个固定的端口,例如, SMTP 使用 25 Xwindows 使用 6000 。这些端口号是‘广为人知’的,因为在建立与特定的主机或服务的连接时,需要这些地址和目的地址进行通讯。

第二十二个:什么是 Sniffer


现在人们谈到黑客攻击,一般所指的都是以主动方式进行的,例如利用漏洞或者猜测系统密码的方式对系统进行攻击。但是其实还有一类危害非常大的被动攻击方式往往为大家所忽视,那就是利用 Sniffer 进行嗅探攻击。  
Sniffer
,中文可以翻译为嗅探器,是一种威胁性极大的被动攻击工具。使用这种工具,可以监视网络的状态、数据流动情况以及网络上传输的信息。当信息以明文的形式在网络上传输时,便可以使用网络监听的方式来进行攻击。将网络接口设置在监听模式,便可以将网上传输的源源不断的信息截获。黑客们常常用它来截获用户的口令。据说某个骨干网络的路由器曾经被黑客攻人,并嗅探到大量的用户口令。本文将详细介绍 Sniffer 的原理和应用。  

一、 Sniffer  原理  

1
.网络技术与设备简介  
在讲述 Sni er 的概念之前,首先需要讲述局域网设备的一些基本概念。  
数据在网络上是以很小的称为帧( Frame )的单位传输的,帧由几部分组成,不同的部分执行不同的功能。帧通过特定的称为网络驱动程序的软件进行成型,然后通过网卡发送到网线上,通过网线到达它们的目的机器,在目的机器的一端执行相反的过程。接收端机器的以太网卡捕获到这些帧,并告诉操作系统帧已到达,然后对其进行存储。就是在这个传输和接收的过程中,嗅探器会带来安全方面的问题。  
每一个在局域网( LAN )上的工作站都有其硬件地址,这些地址惟一地表示了网络上的机器(这一点与 Internet 地址系统比较相似)。当用户发送一个数据包时,这些数据包就会发送到 LAN 上所有可用的机器。  
在一般情况下,网络上所有的机器都可以“听”到通过的流量,但对不属于自己的数据包则不予响应(换句话说,工作站 A 不会捕获属于工作站 B 的数据,而是简单地忽略这些数据)。如果某个工作站的网络接口处于混杂模式(关于混杂模式的概念会在后面解释),那么它就可以捕获网络上所有的数据包和帧。  

2
.网络监听原理  
Sniffer
程序是一种利用以太网的特性把网络适配卡( NIC ,一般为以太网卡)置为杂乱( promiscuous )模式状态的工具,一旦网卡设置为这种模式,它就能接收传输在网络上的每一个信息包。  
普通的情况下,网卡只接收和自己的地址有关的信息包,即传输到本地主机的信息包。要使 Sniffer 能接收并处理这种方式的信息,系统需要支持 BPF Linux 下需要支持 SOCKET PACKET 。但一般情况下,网络硬件和 TCP IP 堆栈不支持接收或者发送与本地计算机无关的数据包,所以,为了绕过标准的 TCP IP 堆栈,网卡就必须设置为我们刚开始讲的混杂模式。一般情况下,要激活这种方式,内核必须支持这种伪设备 Bpfilter ,而且需要 root 权限来运行这种程序,所以 sniffer 需要 root 身份安装,如果只是以本地用户的身份进人了系统,那么不可能唤探到 root 的密码,因为不能运行 Sniffer  
基于 Sniffer 这样的模式,可以分析各种信息包并描述出网络的结构和使用的机器,由于它接收任何一个在同一网段上传输的数据包,所以也就存在着捕获密码、各种信息、秘密文档等一些没有加密的信息的可能性。这成为黑客们常用的扩大战果的方法,用来夺取其他主机的控制权  

3 Snifffer
的分类  
Sniffer
分为软件和硬件两种,软件的 Sniffer  NetXray Packetboy Net monitor 等,其优点是物美价廉,易于学习使用,同时也易于交流;缺点是无法抓取网络上所有的传输,某些情况下也就无法真正了解网络的故障和运行情况。硬件的 Sniffer 通常称为协议分析仪,一般都是商业性的,价格也比较贵。  
实际上本文中所讲的 Sniffer 指的是软件。它把包抓取下来,然后打开并查看其中的内容,可以得到密码等。 Sniffer 只能抓取一个物理网段内的包,就是说,你和监听的目标中间不能有路由或其他屏蔽广播包的设备,这一点很重要。所以,对一般拨号上网的用户来说,是不可能利用 Sniffer 来窃听到其他人的通信内容的。  

4
.网络监听的目的  

当一个黑客成功地攻陷了一台主机,并拿到了 root 权限,而且还想利用这台主机去攻击同一网段上的其他主机时,他就会在这台主机上安装 Sniffer 软件,对以太网设备上传送的数据包进行侦听,从而发现感兴趣的包。如果发现符合条件的包,就把它存到一个 LOg 文件中去。通常设置的这些条件是包含字“ username ”或“ password ”的包,这样的包里面通常有黑客感兴趣的密码之类的东西。一旦黑客截获得了某台主机的密码,他就会立刻进人这台主机。  
如果 Sniffer 运行在路由器上或有路由功能的主机上,就能对大量的数据进行监控,因为所有进出网络的数据包都要经过路由器。  
Sniffer
属于第 M 层次的攻击。就是说,只有在攻击者已经进入了目标系统的情况下,才能使用 Sniffer 这种攻击手段,以便得到更多的信息。  
Sniffer
除了能得到口令或用户名外,还能得到更多的其他信息,比如一个重要的信息、在网上传送的金融信息等等。 Sniffer 几乎能得到任何在以太网上传送的数据包。  
Sniffer
是一种比较复杂的攻击手段,一般只有黑客老手才有能力使用它,而对于一个网络新手来说,即使在一台主机上成功地编译并运行了 Sniffer ,一般也不会得到什么有用的信息,因为通常网络上的信息流量是相当大的,如果不加选择地接收所有的包,然后从中找到所需要的信息非常困难;而且,如果长时间进行监听,还有可能把放置 Sniffer 的机器的硬盘撑爆。  

5
.一个简单的 Sniffer 程序  

下面是一个非常简单的 C 程序,它可以完成一般的监听功能,/ * * /中的内容是本文的注解。  

/*
下面是包含进行调用系统和网络函数的头文件 */ 

#include
stdio.h  
#include
sys/socket.h  
#include
netinet/in.h  
#include
arpa/inet.h  
/*
下面是 IP TCP 包头结构 */ 
struct IP{ 
unsigned int ip_length:4; 
/*
定义 IP 头的长度 */ 
unsigned int ip_version:4
 
/*IP
版本, Ipv4 */ 
unsigned char ip_tos
 
/*
服务类型 */ 
unsigned short 
ip_total_length; /*IP
数据包的总长度 */ 
unsigned short ip_id; 
/*
鉴定城 */ 
unsigned short ip_flags; 
/*IP 
标志  */ 
unsigned char ip_ttl; 
/*IP 
包的存活期 */ 
unsigned char ip_protocol; 
/*IP 
上层的协议 */ 
unsigned short ip_cksum; 
/*IP
头校验和 */ 
unsigned int ip_source 
 
/*
IP 地址 */ 
unsigned int ip_source; 
/*
目的 IP 地址 */ 
}
 
struct tcp{ 
unsigned short tcp_source_port; 
/*
定义 TCP 源端口
unsigned short tcp_dest_port; 
/*TCP
目的端口 */ 
unsigned short tcp_seqno
 
/*TC P
序列号 */ 
unsigned int tcp_ackno; 
/*
发送者期望的下一个序列号 */ 
unsigned int tcp_res1:4; 
/*
下面几个是 TCP 标志 */ 
tcp_hlen:4 
tcp_fin:1, 
tcp_syn:1, 
tcp_rst:1, 
tcp_psh:1, 
tcp_ack:1, 
tcp_urg:1, 
tcp_res2:2; 
unsignd short tcp_winsize; /*
能接收的最大字节数 */ 
unsigned short tcp_cksum; 
/* TCP
校验和 */ 
unsigned short tcp_urgent; 
/* 
紧急事件标志 */ 
};
/*
主函数 */ 
int main() 

int sock,bytes_recieved,fromlen; 
char buffer[65535]; 
struct sockaddr_in from; 
/*
定义 socket 结构 */ 
struct ip ip; 
/*
定义 IP TCP*/ 
struct tcp *tcp; 
sock=socket(AF_INET,SOCK_RAW,IPPROTO_TCP); 
/* 
上面是建立 socket 连接,第一个参数是地址族类型,用 INTERNET 类型 */ 
/* 
第二个参数是 socket 类型,这里用了 SOCK_RAW ,它可以绕过传输层 */ 
/* 
直接访问 IP 层的包,为了调用 SOCK_RAW, 需要有 root 权限 */ 
/* 
第三个参数是协议,选 IPPROTO_TCP 指定了接收 TCP 层的内容 */ 
while(1) 
/*
建立一个死循环,不停的接收网络信息 */ 

fromlen=sizeof from; 
bytes_recieved=recvfrom(sock,buffer,sizeofbuffer,0,(struct sockaddr *)&from,&fromlen); 
/*
上面这个函数是从建立的 socket 连接中接收数据 */ 
/*
因为 recvfrom() 需要一个 sockaddr 数据类型,所以我们用了一个强制类型转换 */ 
print(/"//nBytes received ::: %5d//n/",bytes_recieved); 
/*
显示出接收的数据字节数 */ 
printf(/"source address ::: %s//n/",inet_ntoa(from.sin_addr)); 
/*
显示出源地址 */ 
ip=(struct ip *)buffer; 
/*
把接收的数据转化为我们预先定义的结构,便于查看 */ 
printf(/"IP header length ::: %d//n/",ip->ip_length); 
/*
显示 IP 头的长度 */ 
print(/"Protocol ::: %d//n/",ip->ip_protocol); 
/*
显示协议类型, 6 TCP 17 UDP*/ 
tcp=(struct tcp *)(buffer + (4*ip->ip_iplength)); 
/*
上面这名需要详细解释一下,因为接收的包头数据中, IP 头的大小是固定的 4 字节 */ 
/*
所以我用 IP 长度乘以 4, 指向 TCP 头部分 */ 
printf(/"Source port ::: %d//n/",ntohs(tcp->tcp_source_port); /*
显示出端口 */ 
printf(/"Dest prot ::: %d//n/",ntohs(tcp->tcp_dest_port));/*
显示出目标端口 */ 

以上这个 C 程序是为了说明 Sniffer 的接收原理而列举的一个最简单的例子,它只是完成了 Sniffer 的接收功能,在运行它之前,我们还需要手工把同卡设为混杂模式,在 root 权限下用如下命令设置:  

ifconfig eth0 promisc 

假设 etho 是你的以太网设备接口,然后运行编译好的程序,就可以看到接收的数据包了。  
这个程序虽然简单,但是它说明了 Sniffer 的基本原理,就是先把同卡设备设为混杂模式,然后直接接收 IP 层的数据。  
当然这个程序的功能也太简单,只能显示源地址、目标地址和源端口、目标端口等极为简单的信息,这对于黑客来说是没有什么用处的,黑客要的是密码之类的信息,这可以使用一些免费的 Sniffer 程序来完成。  


想了解更全面的 Sniffer 知识,请进入这个页面: http://www.cn90.net/viewthread.php?tid=2358&pid=10814
第二十三个:什么是 PID


针对 5minglei  的提问 , 我真是不好回答 , 因为 PID 有很多解释 , 其中之一是 : PID 是比例( p + 积分( I + 微分( D )控制程序  
但是你说的是 PID , 我猜你是不是指进程里的 PID 项呢
如果是这样的话 , 其实 PID 一列代表了各进程的进程 ID, 也就是说 ,PID 就是各进程的身份标识

~~ 本来我还想多说点 , 可是下班了 , 没时间了 , 不写了 , 这样吧 , 我拿出 ( 部分 ) 进程的编程源码大家参考一下吧  

创建新进程: fork 函数  
#include 
#include 

pid_t fork(void); 

fork() ’函数用于从已存在进程中创建一个新进程。新进程称为子进程,而原进程称为  
父进程。你可以通过检查‘ fork() ’函数的返回值知道哪个是父进程,哪个是子进程。父  
进程得到的返回值是子进程的进程号,而子进程则返回 0 。以下这个范例程序说明它的基本  
功能:  

pid_t pid; 

switch (pid = fork()) 

case -1: 
/* 
这里 pid -1 fork 函数失败  */ 
/* 
一些可能的原因是  */ 
/* 
进程数或虚拟内存用尽  */ 
perror(/"The fork failed!/"); 
break; 

case 0: 
/* pid
0 ,子进程  */ 
/* 
这里,我们是孩子,要做什么?  */ 
/* ... */ 
/* 
但是做完后 我们需要做类似下面:  */ 
_exit(0); 

default: 
/* pid
大于 0 ,为父进程得到的子进程号  */ 
printf(/"Child/'s pid is %d//n/",pid); 


当然,有人可以用‘ if() ... else ... ’语句取代‘ switch() ’语句,但是上面的形式是  
一个有用的惯用方法。

第二十四个:什么是主机、服务器、空间?他们的区别是什么?


街街的提问,由于我现在时间有限,我作一下简单的解答,希望你能理解 ~~ 

主机一般是指个人使用的电脑 PC 机。而在专业术语中,主机仅是电脑的一部分。而我们常说的主机却往往代表整个电脑,你目前理解为这个也行。。。  

服务器一般是指用于专业用的电脑 PC 机,在实质上,服务器和主机没有什么意义上的区别。主机如果做为服务器也是可以的,服务器也可以当个人主机用。  
然而我们平时要做为真正的服务器来使用时(一般是企业)。服务器的硬件要求要比普通的个人 PC 要求要高的多。比如 WEB 服务器,要 24 小时不能离线。所以在散热,耐热等方面就比普通 PC 要高很多。  

至于空间,就是能通过网络访问到的计计算机磁盘空间,我们一般是指 WEB 服务器空间。如果你的主机有固定的 IP 地址。也能 24 在线,那么你的硬盘也是可以作为空间使用的,当然,还是需要进行一系列的服务器配置,别人才能访问的到的 ~~
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页