网络通信编程 原始套接字程序设计PPT课件

上传人:资****亨 文档编号:129494210 上传时间:2020-04-23 格式:PPT 页数:96 大小:1.14MB
返回 下载 相关 举报
网络通信编程 原始套接字程序设计PPT课件_第1页
第1页 / 共96页
网络通信编程 原始套接字程序设计PPT课件_第2页
第2页 / 共96页
网络通信编程 原始套接字程序设计PPT课件_第3页
第3页 / 共96页
网络通信编程 原始套接字程序设计PPT课件_第4页
第4页 / 共96页
网络通信编程 原始套接字程序设计PPT课件_第5页
第5页 / 共96页
点击查看更多>>
资源描述

《网络通信编程 原始套接字程序设计PPT课件》由会员分享,可在线阅读,更多相关《网络通信编程 原始套接字程序设计PPT课件(96页珍藏版)》请在金锄头文库上搜索。

1、 1 第四章 原始套接字 2 内容提要 1 使用原始套接字2 套接字选项3 ICMP编程4 使用IP头包含选项5 网络嗅探器实例 3 1 使用原始套接字 利用原始套接字 RawSocket 可访问底层传输协议 原始套接字 RawSocket 与标准套接字区别 4 使用原始套接字可以做什么 实现一些实用工具 ping traceroute 可对IP头 TCP头 UDP头 ICMP头等进行操作 原始套接字使用SOCK RAW套接字类型来创建的 目前只有Winsock2提供了对它的支持 无论MicrosoftWindowsCE还是老版本的Windows95 无Winsock2升级 均不能利用原始套接

2、字 5 创建原始套接字 原始套接字类型在IP头中使用预定义的协议 如ICMP 在IP头中使用自定义的协议 使用IP头包含选项 6 创建原始套接字使用socket 或WSASocket 创建原始套接字 例 创建原始套接字使用预定义协议 SOCKETs S socket AF INET SOCK RAM IPPROTO ICMP ORS WSAsocket AF INEF SOCK RAM IPPROTO ICMP NULL 0 WSA FLAG OVERLAPPED 7 使用自定义协议使用IGMP UDP IP或者原始IP 只需分别设置IPPROTO IGMP IPPROTO UDP IPPRO

3、TO IP或IPPROTO RAW即可 注意 在WindowsNT4 Windows98以及Windows95 安装Winsock2 操作系统中 创建原始套接字时 只能使用ICMP 协议标志IPPROTO UDP IPPROTO IP以及IPPROTO RAW均要求使用套接字选项IP HDRINCL 而该选项在上述平台下都是不支持的 Windows2000提供了对IP HDRINCL选项的支持 所以能够处理IP头 IPPROTO RAW TCP头 IPPROTO TCP 以及UDP头 IPPROTO UDP 无论是否设置IP HDRINCL选项 原始套接字上接收到的数据都会包含IP头 8 使用

4、原始套接字可以对底层传输机制加以控制 所以有些人将其用于不法用途 9 套接字选项操作函数getsocketopt 获取套接字选项信息 intgetsocketopt SOCKETs 套接字描述符intlevel 选项级别intoptname 选项名称char optval 选项值int optlen 选项长度 setsocketopt 设置套接字选项 intsetsocketopt SOCKETs intlevel intoptname constchar optval intoptlen 2 套接字选项 10 选项级别 协议的层次对应选项级别应用层 SOL SOCKET传输层 IPPROTO

5、 TCP IPPROTO UDP网络层 IPPROTO IP不同级别属性不同 同一级别的不同协议的属性不同 因此必须指定level参数例 IntnTime 2 1000setsockopt s SOL SOCKET SO RCVTIMEO char nTime sizeof nTime 11 SOL SOCKET选项级别SO ACCEPTCONN 如果已调用Listen函数 将套接字置为监听模式 这个选项就会返回TRUE SOCK DGRAM类型的套接字不支持这一选项 SO BROADCAST 12 SO CONNECT TIME 该选项最常见的用法是和AcceptEx函数一道使用 SO DO

6、NTROUTE 假定创建了一个UDP套接字 并将其与接口A绑定到一起 然后发送一个数据包 目的地址是网络中使用接口B的另一个网络上的某台机器 此时 若采用默认设置 该数据包会经过一个路由过程 使其能通过接口B传入目标网络 但将这里的布尔值设为TRUE 再来调用setsockopt 便可禁止路由 数据包会从绑定的接口上直接发送出去 以后可调用getsockopt 判断是否允许了路由 注意 在默认情况下 路由是允许的 13 SO REUSEADDR 监听套接字例外 两个独立的套接字不可与同一个本地地址绑定到一起 以等待进入的连接通知 SO EXCLUSIVEADDRUSE 例如 假定两个单独的进程

7、都与同一个本地地址绑定到了一起 假定已设置了SO REUSEADDR 那么两个套接字中到底由哪一个负责接收进入连接请求通知呢 这一点并未定义 如果应用程序的要求非常苛刻 用于关键性任务的程序 这一点显然是非常不幸的 SO EXCLUSIVEADDRUSE选项的作用便是将一个本地地址牢牢锁定在与它绑定的那个套接字上 14 SO RCVBUF 改缓冲区的大小 一个可能的原因是需要根据应用程序的行为 对缓冲区大小进行相应地调整 SO SNDBUF 15 SO RCVTIMEO SO SNDTIMEO 主要用于设置阻塞套接字的收发超时时间 超时时间实际上指明了阻塞时间的长短 当调用接收 发送 函数时

8、如果在SO RCVTIMEO SO SNDTIMEO 指定的时间内没有数据到来 那么函数调用也会结束并且返回错误10060 WSAETIMEDOUT 16 IPPROTO IP级别IPPROTO IP这一级的套接字选项与IP协议存在密切联系 比如可用这些选项修改IP头的特定字段以及向IP多播组增添一个套接字等等 IP OPTIONS 通过该选项可在IP头内设置各种IP选项 可能出现的选项包括 记录路由 每个路由器都将自己的IP地址添加到IP头内 时间标志 时间戳 每个路由器都增添自己的IP地址及时间 17 源路由选择 源主机指定一条通过互联网的路径 注意 主机和路由器并不支持所有这些选项 设置

9、一个IP选项时 传至setsockopt调用内部的数据会遵照下图所示的数据结构 IP选项头最长可达40字节 IP选项头格式 18 IP HDRINCL 若将IP HDRINCL选项设为TRUE 发送函数会将IP头包括在发送的数据前面 并会促使接收函数将IP头作为数据的一部分 在调用一个Winsock发送函数的时候 必须在数据前面包括完整的IP头 并对IP头的每个字段进行正确的填写 仅仅用于原始套接字该选项仅适用于Windows2000操作系统 19 IP TTL TTL字段需要在IP头内进行设置 数据报利用TTL字段对数据报能够通过的最大路由器数量加以限制 避免由于路由循环 造成数据报永无休止

10、地在网络中 游荡 数据报每经过一个路由器 都会由路由器解析出它的TTL值 并将其减去1 若发现这个值变成了0 数据报便会被 无情 地丢弃 注意 WindowsCE不支持这个选项 20 3 ICMP编程 内容提要ICMP协议PING程序分析TRACEROUTE程序分析 为了提高IP数据报交付成功的机会 在网际层使用了因特网控制报文协议ICMP InternetControlMessageProtocol ICMP允许主机或路由器报告差错情况和提供有关异常情况的报告 ICMP不是高层协议 而是IP层的协议 ICMP报文作为IP层数据报的数据 加上数据报的首部 组成IP数据报发送出去 ICMP协议

11、ICMP的位置及封装 IP ICMP IGMP ARP RARP Networklayer ICMPmessage ICMPmessage ICMP本身是一个网络层协议ICMP报文首先要封装成IP数据报 然后再传送给下一层 ICMP报文的格式 首部 ICMP报文 0 数据部分 检验和 类型 代码 这4个字节取决于ICMP报文的类型 8 16 31 IP数据报 前4个字节都是一样的 ICMP的数据部分 长度取决于类型 ICMP报文中各字段的作用 类型 8比特长字段 定义了报文的类型 代码 8比特长字段 指明了发送此特定报文类型的原因 检验和 16比特长字段 进行差错检验 首部的其余部分 对每一种

12、报文类型都是特定的 数据部分 在差错报文中 所携带的信息可找出引起差错的原始分组 在查询报文中 携带了基于查询类型的额外信息 报文类型 ICMP报文 差错报告 查询 报告路由器或主机 目的站 在处理一个IP数据报时可能遇到的一些问题 帮助主机或网络管理员从一个路由器或另一个主机得到特定的信息它是成对出现的 ICMP差错报告报文的数据字段的内容 首部 IP数据报 ICMP的前8字节 装入ICMP报文的IP数据报 IP数据报首部 ICMP差错报告报文 8字节 收到的IP数据报 IP数据报首部 8字节 ICMP差错报告报文 IP数据报的数据字段 1 回送请求和回答 由主机 路由器向一特定主机发出IC

13、MP询问 特定主机收到后必须给出ICMP回答报文 代码 0 检验和 可选数据 由请求报文发送 由回答报文重复 类型 8or0 标识符 序号 8 回送请求0 回送回答 ICMP查询报文 说明 主机或路由器可以发送回送请求报文 收到回送请求报文的主机或路由器发送出回送回答报文 回送请求和回送回答报文可由网络管理员来使用 用来检查IP协议的工作情况 用回送请求和回送回答报文可测试一个主机的可达性 通常是调用ping命令来这样做的 格式中的标识符和序号字段在协议中没有正式定义 可以由发送站任意使用 可供选择的数据字段包含一个报文 它必须由回答的结点在回送回答报文中完全一样的重复 2 时间戳请求和回答

14、代码 0 检验和 类型 13or14 标识符 序号 13 请求14 回答 发送时间戳 接收时间戳 传送时间戳 说明 发送时间戳 发送方填写接收时间戳 应答主机收到请求报文时填写传送时间戳 应答主机发送应答报文时填写 3 地址掩码请求和回答 代码 0 检验和 类型 17or18 标识符 序号 17 请求18 回答 地址掩码 主机可能知道他的完整IP地址 但却不知道地址中的哪一部分定义网络地址和子网地址 哪一部分对应于主机标识符 这样 主机就需要知道掩码 要得到掩码 主机应发送地址掩码请求报文给局域网上的路由器 若主机知道该路由器的地址 它就将这个请求直接发给该路由器 若不知道 则广播此报文 路由

15、器收到地址掩码请求报文就响应地址掩码回答报文 向主机提供所需的掩码 在请求报文中 地址掩码字段填入全0 回答报文中 这个字段就包含真正的掩码 说明 检验和 发送端的检验和计算 先将首部的检验和字段置为0 将分组划分为K部分 每部分都是16比特长 用反码算术运算将所有这些部分相加 将最终结果取反码就得出检验和 再将其填入检验和字段 接收端的检验和计算 将收到的分组划分为K部分 每部分都是16比特长 用反码算术运算将所有这些部分相加 将得到的结果取反码 若结果为0 则接收此分组 否组就拒绝此分组 在ICMP中 检验和的计算覆盖了整个报文 首部和数据 PING程序分析 使用原始套接字实现回送请求和回

16、答 PING程序的设计与实现 PING用来测试两个主机之间的连通性 PING使用了ICMP回送请求与回送回答报文 PING是应用层直接使用网络层ICMP的例子 它没有通过运输层的TCP或UDP C DocumentsandSettings wy 代码 0 检验和 可选数据 由请求报文发送 由回答报文重复 类型 8or0 标识符 序号 8 回送请求0 回送回答 PING使用了ICMP回送请求与回送回答报文 原始套接字的创建 函数格式 创建原始套节字SOCKETsRaw socket AF INET SOCK RAW IPPROTO ICMP IPPROTO ICMP指定使用ICMP PING程序执行步骤 1 创建协议类型为IPPROTO ICMP的原始套接字 设置套接字的属性 2 创建并初始化ICMP封包 3 调用sendto函数向远程主机发送ICMP请求 4 调用recvfrom函数接收ICMP响应 Ping h 声明IP头数据结构typedefstruct IPHeader 20字节的IP头 UCHARiphVerLen 版本号和头长度 各占4位 UCHARipTOS 服务类型USH

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号