Windows+网络编程技术(十三)Windows_网络编程技术(十.pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《Windows+网络编程技术(十三)Windows_网络编程技术(十.pdf》由会员分享,可在线阅读,更多相关《Windows+网络编程技术(十三)Windows_网络编程技术(十.pdf(23页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、下载第13章 原始套接字利用“原始套接字”(Raw Socket),我们可访问位于基层的传输协议。本章专门讲解如何运用这种原始套接字,来模拟 I P的一些实用工具,比如 Tr a c e r o u t e和P i n g程序等等。使用原始套接字,亦可对 I P头信息进行实际的操作。本章只关心 I P协议;至于如何针对其他协议使用原始套接字,我们不打算提及。而且,大多数协议(除 AT M以外)根本就不支持原始套接字。所有原始套接字都是使用 S O C K _ R AW这个套接字类型来创建的,而且目前只有 Wi n s o c k2提供了对它的支持。因此,无论 Microsoft Windows
2、 CE还是老版本的 Windows 95(无Winsock 2升级)均不能利用原始套接字的能力。此外,要想顺利使用原始套接字,要求对基层的协议结构有一定程度的认识,而那已超出了本书的范围。在这一章中,我们打算讨论 I n t e r n e t控制消息协议(I C M P)、I n t e r n e t组管理协议(I G M P)以及用户数据报协议(U D P)。I C M P会由P i n g这个实用程序用到,以便探测到某个主机的路由是否有效和畅通,看看对方的机器是否会作出响应。对程序开发者来说,经常都要用到一种程序化的方法,以便判断一台机器是否“活动”,网络数据能否抵达它。I P多播通信
3、利用I G M P将多播组成员信息通告给路由器。大多数 Wi n 3 2平台目前都增加了对 I G M P第2版的支持。但在某些情况下,我们也需要送出自己的 I G M P数据包,以便脱离组成员关系。至于U D P协议,我们打算把它同 I P _ H D R I N C L这个套接字选项组合起来讨论。以它为例,讲述如何发送自己的I G M P包。对这三种协议来说,我们都只会讲解与本章示范代码及示范程序密切相关的那些部分。13.1 原始套接字的创建要想使用原始套接字,第一步便是创建它。可用 s o c k e t命令或W S A S o c k e t调用来做到这一点。注意在典型情况下,在 Wi
4、 n s o c k为I P列出的目录中,并不存在 S O C K _ R AW这一套接字类型。然而,这并不能妨碍我们创建此种类型的套接字。它的意思只是说,我们不能用一个W S A P R O TO C O L _ I N F O结构来创建一个原始套接字。请参考第 5章,那里详细讲述了如何用W S A E n u m P r o t o c o l s函数以及W S A P R O TO C O L _ I N F O结构来列举协议条目。注意在套接字的创建过程中,必须自行设定 S O C K _ R AW标志。下述代码片断解释了如何将 I C M P作为一种基层I P协议,来完成一个原始套接字
5、的创建:由于原始套接字使人们能对基层传输机制加以控制,所以有些人将其用于不法用途,从第13章计原始套接字计计341下载而造成了Windows NT下一个潜在的安全漏洞。因此,只有属于“管理员”(A d m i n i s t r a t o r s)组的成员,才有权创建类型为 S O C K _ R AW的套接字。而Windows 95和Windows 98均未施加这方面的限制。要想在Windows NT中绕过这一限制,可考虑禁止对原始套接字的安全检查。方法是在注册表创建如下变量,并将它的值设为 1(D W O R D类型):更改了注册表后,注意重新启动计算机。在上述示范代码中,我们采用的是
6、I C M P协议。但假如想使用 I G M P、U D P、I P或者原始I P,只需分别设置I P P R O TO _ I G M P、I P P R O TO _ U D P、I P P R O TO _ I P或者I P P R O TO _ R AW即可。然而,请注意其中存在的一处限制:在 Windows NT 4、Windows 98以及Windows 95(安装Winsock 2)操作系统中,创建原始套接字时,只能使用I G M P和I C M P。协议标志I P P R O TO _ U D P、I P P R O TO _ I P以及I P P R O TO _ R AW均
7、要求使用套接字选项I P _ H D R I N C L,而该选项在上述平台下都是不支持的。然而,Windows 2000确实提供了对I P _ H D R I N C L选项的支持,所以能够处理 I P头(I P P R O TO _ R AW)、T C P头(I P P R O TO _ T C P)以及 U D P头(I P P R O TO _ U D P)。采用恰当的协议标志,完成了原始套接字的创建之后,接下来的事情便是在发送及接收调用中,使用对应的套接字句柄。创建原始套接字时,I P头会包含在接收到的任何返回数据中,无论是否设定了I P _ H D R I N C L选项。13.2
8、 Internet控制消息协议I n t e r n e t控制消息协议(I C M P)是便于不同主机间传递简短消息的一种机制。大多数I C M P消息都牵涉到主机间通信时发生的一些错误;而其他 I C M P消息用于对主机进行查询。I C M P协议采用的是I P定址机制,因为它本身就是封装在 I P数据报内的一种协议。在图1 3-1中,我们展示了I C M P消息的各个字段。整条I C M P消息封装在一个I P头内。图13-1 ICMP头其中,第一个字段指定的是 I C M P消息类型,可分为查询或错误两类。随后,“代码”字段进一步定义了查询或消息的类型。而“校验和”字段的长度为 1
9、6位,是对I C M P头内容的一个补余求和。最后,I C M P的实际内容要依赖于前面设定的 I C M P类型及代码。在表 1 3-1中,我们对那些类型及代码进行了详细总结。若生成的是一条I C M P错误消息,那么在消息中,肯定包含了导致那个 I C M P错误的I P头,以及I P数据报的头8个字节。这样一来,收到 I C M P错误的主机便可将消息与一种特定的协议联系起来。并可根据实际情况,对那个错误作出处理。就我们目前的情况来说,P i n g需要依赖于回应请求及回应答复这两种 I C M P查询,而不是仅仅依赖一条错误消息。生成 I C M P消息的主机会通过T C P或U D
10、P,对问题作出响应;除此之外,I C M P的用处并不大。在下一节里,8位ICMP类型8位ICMP代码ICMP具体内容(取决于类型和代码)16位ICMP检验和我们打算讨论如何随原始套接字一道,用 I C M P协议来生成一个P i n g请求,P i n g请求是用来回应请求和回应答复消息的。表13-1 ICMP消息类型类型查询错误(错误类型)代码说明0查询0回应答复(Echo Reply)3错误:目标不可抵达0网络访问不到1主机访问不到2协议访问不到3端口访问不到4数据包需要分段(分解),但却没有设置分段位5源路由失效6目标网络未知7目标主机未知8源主机独立(作废)9目标网络管理性禁止1 0
11、目标主机管理性禁止11针对特定的TO S(服务类型),网络不可抵达1 2针对特定的TO S(服务类型),主机不可抵达1 3由于过滤,通信被管理性地禁止1 4违反主机优先级设定1 5优先级失效4错误0源主机停止工作5错误:重定向0为网络重定向1为主机重定向2和TO S和网络重定向3和TO S和主机重定向8查询0回应请求(Echo Request)9查询0路由器广告1 0查询0路由器请求11错误:超时0传输过程中T T L的值变成01重新组合时T T L的值变成01 2错误:参数问题0I P头损坏1必需的选项丢失1 3查询0时间戳请求1 4查询0时间戳答复1 5查询0信息请求1 6查询0信息答复1
12、 7查询0地址掩码请求1 8查询0地址掩码答复13.2.1 Ping示例我们经常用P i n g来判断一个特定的主机是否处于活动状态,并且是否可以通过网络访问到。通过生成一个 I C M P“回应请求”(Echo Request),并将其定向至打算查询的目标主机,便可知道自己是否能成功地访问到那台机器。当然,这样做并不能担保一个套接字客户机能与那个主机上的某个进程顺利地建立连接(例如,远程服务器上的一个进程也许并没有进入监听模式)。若P i n g成功,那么它只能证明一件事情:远程主机的网络层可对网络事件作出响342计计第二部分附Winsock API下载应!概括地说,我们的这个P i n g
13、示例需要采取下面这些步骤:1)创建类型为S O C K _ R AW的一个套接字,同时设定协议I P P R O TO _ I C M P。2)创建并初始化I C M P头。3)调用s e n d t o或W S A S e n d t o,将I C M P请求发给远程主机。4)调用r e c v f r o m或W S A R e c v f r o m,以接收任何I C M P响应。发出I C M P回应请求以后,远程机器会拦截这个请求,然后生成一条回应答复消息,再通过网络传回给我们。假如出于某些方面的原因,不能抵达目标主机,就会生成对应的 I C M P错误消息(比如“目标主机访问不到”
14、),由原先打算建立通信的那个路径上某处的一个路由器返回。假定与远程主机的物理性连接并不存在问题,但远程主机已经关机或没有设置对网络事件作出响应,便需由自己的程序来执行超时检定,来侦测出这样的情况。程序清单1 3-1列出的P i n g.c示例向大家清晰展示了如何创建一个特殊的套接字,以便实现 I C M P包的收发;以及如何通过I P _ O P T I O N S套接字选项,来实现记录路由选项。程序清单13-1 Ping.c第13章计原始套接字计计343下载344计计第二部分附Winsock API下载第13章计原始套接字计计345下载346计计第二部分附Winsock API下载第13章计
15、原始套接字计计347下载348计计第二部分附Winsock API下载第13章计原始套接字计计349下载350计计第二部分附Winsock API下载对这个P i n g示范程序来说,它最引人注目的一个特点便是采用了 I P _ O P T I O N S套接字选项。之所以要使用记录路由 I P选项,是由于这样一来,当我们的 I C M P包抵达路由器时,它的 I P地址便能自动添加到 I P选项头内具体插入位置则取决于事先在 I P选项头内设好的偏移量字段。每次遇到一个路由器向其中加入自己的 I P地址时,这个偏移距离都会自动递增 4。之所以是“4”,而不是其他数字,是由于对 I P v 4
16、地址来说,它的长度正好是 4个字节。本书不打算对I P v 6的情况作深入探讨,目前也没有任何一种 Wi n d o w s平台提供了对它的支持。一旦收到回应答复,便可对选项头进行解析,列印出中途访问过的那些路由器的 I P地址及主机名。大家可参考第9章的内容,了解还能使用其他什么类型的 I P选项。13.2.2 Traceroute示例对I P网络来说,另一个非常有用的工具是Tr a c e r o u t e(路由追踪)。在Wi n d o w s操作系统中,一般可以直接运行Tr a c e r t.e x e,来调用这个工具。利用它,我们可侦测出为抵达网络内任何一个指定的主机,中途需经过
17、哪些路由器,以及它们的 I P地址是什么。当然,亦可利用 P i n g,使用I P选项头内的记录路由选项,侦测中途经过的路由器 I P地址。然而,P i n g最多只支持9次“跳跃”这是在选项头内为地址分配的最大空间。一个 I P数据报需要穿越多个物理性的网络时,每通过一个路由器,我们就说进行了一次“跳跃”。若网络较大(如I n t e r n e t),穿过的路由器不止9个,便应换用Tr a c e r o u t e。Tr a c e r o u t e的设计原理是令其向目的地发送一个 U D P数据包,并重复递增I P的“存活时间”(T T L)值。最开始的时候,T T L等于1;也就
18、是说,一旦它抵达路途中的第一个路由器,T T L首先会超时(变成 0)。这样便会造成路由器生成一个 I C M P“超时”数据包。随后,最初的T T L值递增1,以便U D P包能继续传到下一个路由器,而生成的 I C M P超时包会自第一个路由器返回。只需将返回的每一条 I C M P消息都收集下来,便能为中途经过的路由器 I P地址勾勒出一个清晰的轮廓,直到最终抵达目标主机。一旦 T T L的值递增得足够大,可以实际抵达目标位置,通常便会返回一条 I C M P“端口访问不到”消息,因为在接收端主机上,并没有进程在等待这条消息。之所以认为Tr a c e r o u t e是一个有用的工具
19、,是由于它为我们提供了与中途经历的路由器有第13章计原始套接字计计351下载关的大量信息。进行多播通信,或者在遇到路由问题的时候,这些资料便显得非常宝贵。对具体的应用程序来说,尽管需要执行 Tr a c e r o u t e的机会比P i n g少得多,但对某些特定的任务而言,却恐怕只有Tr a c e r o u t e才能胜任。有两个办法可用来实现Tr a c e r o u t e程序。第一个办法,可使用 U D P包和发送数据报,连续递增更改T T L的值。T T L每一次“超时”,都会向我们返回一条I C M P消息。这种方法要求使用安装了U D P协议的一个套接字来发送数据,同时
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Windows 网络 编程 技术 十三 Windows_
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内