网站大量收购独家精品文档,联系QQ:2885784924

06网络程序设计_原始套接字.ppt

  1. 1、本文档共33页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
06网络程序设计_原始套接字课件

* * * * 课堂作业 1、实现广播和多播时能否使用流式套接字?为什么? 2、接收广播数据和接收一般UDP数据有什么不同? 3、发送自己封装的UDP数据报应遵循什么步骤? 4、阐述路由跟踪原理,给出实现思路。 5、简述网络嗅探器的编写步骤。 课后作业 封装一个TCP报文头用于发起建立连接请求 * * * “类型”字段指定的是ICMP消息类型,可分为查询或错误两类。 “代码”字段进一步定义了查询或消息的类型。 “校验和”字段的长度为16位,是对ICMP头内容的一个补余求和。 ICMP的实际内容要依赖于前面设定的ICMP类型及代码。 * * 最开始的时候, TTL等于1;也就是说,一旦它抵达路途中的第一个路由器, TTL首先会超时(变成0)。这样便会造成路由器生成一个ICMP“超时”数据包。随后,最初的TTL值递增1,以便UDP包能继续传到下一个路由器,而生成的ICMP超时包会自第一个路由器返回。只需将返回的每一条ICMP消息都收集下来,便能为中途经过的路由器IP地址勾勒出一个清晰的轮廓,直到最终抵达目标主机。一旦TTL的值递增得足够大,可以实际抵达目标位置,通常便会返回一条ICMP“端口访问不到”消息,因为在接收端主机上,并没有进程在等待这条消息。 方法一:使用UDP包和发送数据报,连续递增更改TTL的值。TTL每一次“超时”,都会向我们返回一条ICMP消息。这种方法要求使用安装了UDP协议的一个套接字来发送数据,同时用安装了ICMP协议的另一个套接字来接收数据(读取返回的消息)。而ICMP 套接字的类型比较特殊,是SOCK_RAW(原始套接字),并设定了IPPROTO_ICMP协议。UDP套接字的TTL值需要通过IP_TTL套接字选项加以控制。此外,也可以创建一个UDP套接字,并使用IP_HDRINCL选项,在IP头内对TTL进行人工设置。当然,这要求程序员进行更多的工作。 方法二:只需将ICMP数据包简单地发给目的地,同时连续递增更改TTL的值。在TTL“超时”的时候,这样做也会造成一条ICMP错误消息的返回。注意这种方法和Ping有着某些共通之处,它也只要求使用一个套接字(安装ICMP协议)。 * Version:版本,对IPv4来说,此值为4。 IHL:IP Header Length,用于规定报头长度。 Type of service:服务类型(TOS),用于区分不同类型的IP数据报,用于设置数据传输的优先权或者优先级,其大小为8位; 。 Total Length:指出数据报的总长,数据报总长=报头长度+数据长度,大小为16位; Identification:用于标识所有的分段,大小为16位; DF\MF(分段标志):确定一个数据报是否可以分段,同时也指出当前分段后面是否还有更多分段DF代表不要分割,这是一个给路由器的命令,告诉他们不要分割此数据报;MF表示耕多的分割,大小为3位; Fragment offset(分段偏移量):由目标计算机用于查找分段在整个数据报中的位置,大小位13位; Time to live(生存时间):设置数据报可以经过的最多路由器数。长度为8位; Protocol(协议):指定用于创建数据字段中的数据的上层协议,大小为8位; Header checksum(校验和):检查所传输数据的完整性,大小为16位; Source address(源地址):源IP地址,字段长度为32位; Destination(目标地址):目标IP地址,字段长度为32位; Option(选项):不上一个必须的字段,字段长度具体取决于所选择的IP选项; * 其中,头两个字段分别对应源和目标端口号,长度各自为1 6位。第三个字段对应UDP长度;以字节为单位,指定UDP头以及数据的总长。第四个字段则是校验和。UDP包的最后一部分便是实际的数据。 * 对数据包的获取仍象流式套接字或数据报套接字那样通过recv()函数来完成。但是与其他两种套接字不同的是,原始套接字此时捕获到的数据包并不仅仅是单纯的数据信息,而是包含有 IP头、 TCP头等信息头的最原始的数据信息,这些信息保留了它在网络传输时的原貌。通过对这些在低层传输的原始信息的分析可以得到有关网络的一些信息。由于这些数据经过了网络层和传输层的打包,因此需要根据其附加的帧头对数据包进行分析。 * * 第六章 原始套接字 * * 内容提要 概述 ICMP编程 使用IP头包含选项 网络嗅探器实例 * * 概述 利用原始套接字(Raw Socket),可访问底层传输协议。 使用原始套接字可以做什么? 实现一些实用工具(ping,traceroute)。 可对IP头,TCP头,UDP头,ICMP头等进行操作。 原始套接字使用SOCK_RAW套接字类型来创建的,目

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档