第11讲 原始套接字编程.ppt

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

* 2)掌握数据报套接字编程中涉及的基本函数的使用方法; 4)UDP协议提供的是无连接的、不可靠的传输服务,如何在应用程序中解决UDP的不可靠性是要掌握的内容; * * 过程:服务器进程和客户端进程在通信前必须创建各自的套接字,然后对相应的套接字进行“读”、“写”操作,实现数据的传输。 [板书] 用我与朋友联系祝福生日的例子来描述,整个过程中需要确定(四要素) ◎通讯方式:写信(不是打电话、发电报等) ◎标识:双发的通信地址和姓名 ◎内容:信封里的内容,例如“圣诞快乐!” ◎过程:寄信、收信 同样,客户-服务器之间的数据套接字通信过程中也可以找到与以上过程相似的关键点: ◎通讯方式: udp协议 ◎标识:(源IP,源端口)(目标IP,目标端口) ◎内容:udp包中的数据 ◎过程: 发送数据、接收数据 因此,数据报套接字通信的过程如下: 1)创建套接字,指定使用UDP协议(不可靠的传输服务)进行通信——确定通信方式; 2)为该套接字指定本地和远程的IP地址和通信端口——确定通信双方的标识; 3)创建好套接字后,就可以进行数据传输了; 4)通信结束时,要关闭相应的套接字; 该过程与流式套接字的通信过程之间的区别:在进行数据传输前,不需要将通信双方的套接字建立连接; 第11讲 原始套接字编程 Windows网络编程基础 内容提要 1、原始套接字的能力 2、原始套接字编程模型 3、原始套接字创建、输入与输出 4、程序举例 1.原始套接字的能力 原始套接字的能力 Question? 怎样发送一个自定义的IP数据包? 怎样接收ICMP协议承载的差错报文? 怎样使主机捕获网络中其它主机间的报文? 怎样伪装本地的IP地址? 怎样模拟TCP或UDP协议的行为实现对协议的灵活操控? 原始套接字的能力 原始套接字的能力 原始套接字提供普通TCP和UDP套接字不提供的以下三种能力 读写ICMPv4、IGMPv4和ICMPv6等分组。 读写内核不处理其协议字段的IPv4数据报。 控制IPv4头部。 原始套接字的能力 原始套接字的适用场合 (1)特殊用途的探测应用 (2)基于数据包捕获的应用 (3)特殊用途的传输应用 1.原始套接字的能力 2.原始套接字编程模型 原始套接字编程模型 发送数据过程: ①socket初始化 ②创建套接字,指定使用原始套接字进行通信,指定IP头选项; ③指定目的地址和通信端口; ④填充头和数据; ⑤发送数据; ⑥关闭套接字; ⑦结束对windows sockets dll的使用。 原始套接字编程模型 接收数据过程: ①socket初始化 ②创建套接字,指定使用原始套接字进行通信; ③设置接收选项; ④接收数据; ⑤过滤数据; ⑥关闭套接字; ⑦结束对windows sockets dll的使用。 问题1:原始套接字与流式套接字和数据报套接字在编程过程中增加了哪些附加操作? 问题2:应用程序能够接收到哪些数据? 数据报套接字的编程过程 ①创建套接字,指定使用UDP(不可靠的传输服务)进行通信; ②指定本地和远端IP地址和通信端口; ④关闭套接字; ③进行数据传输; 1.原始套接字的能力 2.原始套接字编程模型 3.原始套接字创建、输入与输出 原始套接字创建——1)创建函数 创建者的权限——administrator SOCKET socket( int af, int type, int protocol ) SOCK_RAW 协议 值 含义 IPPROTO_IP 0 IP协议 IPPROTO_ICMP 1 ICMP协议 IPPROTO_IGMP 2 IGMP协议 BTHPROTO_RFCOMM 3 蓝牙通信协议 IPPROTO_IPV4 4 IPv4协议 IPPROTO_TCP 6 TCP协议 IPPROTO_UDP 17 UDP协议 IPPROTO_ IPV6 41 IPv6协议 IPPROTO_ ICMPV6 58 ICMPv6协议 IPPROTO_ RAW 255 原始IP包 原始套接字创建——2)IP首部控制 IP_HDRINCL选项 函数定义:int setsockopt( SOCKET s, int level, int optname, const char* optval, int optlen ); 输入参数: s:套接字描述符; level:选项定义的层次,如IPPROTO_IP; optname:指定套接字选项的名字 optval:指向请求选项数据缓冲区的指针; optlen:选项数据optval缓冲区的长度。 返回值: 正确:0;错误:SOCKET_ERROR (WSAGetLastError) 功能:为套接字相关的选项设置当前值。 说明:

文档评论(0)

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

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

1亿VIP精品文档

相关文档