版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第1111讲讲 原始套接字编程原始套接字编程WindowsWindows网络编程基础网络编程基础内容提要1、原始套接字的能力2、原始套接字编程模型3、原始套接字创建、输入与输出4、程序举例1.1.原始套接字的能力原始套接字的能力原始套接字的能力原始套接字的能力Question?怎样发送一个自定义的怎样发送一个自定义的IP数据包?数据包?怎样接收怎样接收ICMP协议承载的差错报文?协议承载的差错报文?怎样使主机捕获网络中其它主机间的报文?怎样使主机捕获网络中其它主机间的报文?怎样伪装本地的怎样伪装本地的IP地址?地址?怎样模拟怎样模拟TCP或或UDP协议的行为实现对协议的灵活操协议的行为实现对
2、协议的灵活操控?控?原始套接字的能力原始套接字的能力原始套接字的能力原始套接字的能力原始套接字提供普通原始套接字提供普通TCP和和UDP套接字不套接字不提供的以下三种能力提供的以下三种能力读写读写ICMPv4、IGMPv4和和ICMPv6等分组。等分组。读写内核不处理其协议字段的读写内核不处理其协议字段的IPv4数据报。数据报。控制控制IPv4头部。头部。原始套接字的能力原始套接字的能力原始套接字的适用场合原始套接字的适用场合(1)特殊用途的探测应用)特殊用途的探测应用(2)基于数据包捕获的应用)基于数据包捕获的应用(3)特殊用途的传输应用)特殊用途的传输应用1.1.原始套接字的能力原始套接字
3、的能力2.2.原始套接字编程模型原始套接字编程模型原始套接字编程模型原始套接字编程模型发送数据过程:socket初始化创建套接字,指定使用原始套接字进行通信,指定IP头选项;指定目的地址和通信端口;填充头和数据;发送数据;关闭套接字;结束对windows sockets dll的使用。原始套接字编程模型原始套接字编程模型接收数据过程:socket初始化创建套接字,指定使用原始套接字进行通信;设置接收选项;接收数据;过滤数据;关闭套接字;结束对windows sockets dll的使用。问题问题1:原始套接字与流式套接字和数据报套接字:原始套接字与流式套接字和数据报套接字在编程过程中增加了哪些
4、附加操作?在编程过程中增加了哪些附加操作?问题问题2:应用程序能够接收到哪些数据?:应用程序能够接收到哪些数据?数据报套接字的编程过程创建套接字,指定使用创建套接字,指定使用UDPUDP(不可靠的传输服务)(不可靠的传输服务)进行通信;进行通信;指定本地和远端指定本地和远端IPIP地址和通信端口;地址和通信端口;关闭套接字;关闭套接字;进行数据传输;进行数据传输;1.1.原始套接字的能力原始套接字的能力2.2.原始套接字编程模型原始套接字编程模型3.3.原始套接字创建、输入与输出原始套接字创建、输入与输出原始套接字创建原始套接字创建1 1)创建函数)创建函数创建者的权限创建者的权限admini
5、stratorSOCKET socket( int af, int type, int protocol )SOCK_RAW协议协议值值含义含义IPPROTO_IP0IP协议IPPROTO_ICMP1ICMP协议IPPROTO_IGMP2IGMP协议BTHPROTO_RFCOMM3蓝牙通信协议IPPROTO_IPV44IPv4协议IPPROTO_TCP6TCP协议IPPROTO_UDP17UDP协议IPPROTO_ IPV641IPv6协议IPPROTO_ ICMPV658ICMPv6协议IPPROTO_ RAW255原始IP包原始套接字创建原始套接字创建2 2)IPIP首部控制首部控制IP_
6、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)功能:为套接字相关的选项设置当前值。说明:说明:套接字选项有两种类型:设置或禁止特征说明说明 套
7、接字选项有两种类型设置或禁止特征/行为的布尔选项设置:Optval指向一个非零整数禁止:optval指向一个等于零的整数Optlen等于整型数的长度要求整数值或结构的选项Optval指向一个包含选项要求值的整数或结构Optlen为此整数或结构的长度原始套接字创建原始套接字创建2 2)IPIP首部控制首部控制举例:举例:布尔选项设置:BOOL blnFlag=TRUE; setsockopt(sock, IPPROTO_IP, IP_HDRINCL, (char *)&blnFlag, sizeof(blnFlag); 整数值选项设置:例1:int ttl = 7 ; / TTL value.
8、setsockopt(sock, IPPROTO_IP, IP_TTL, (char *)&ttl, sizeof(ttl) 例2:nTimeOver=1000; setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, (char*)&nTimeOver,sizeof(nTimeOver)原始套接字创建原始套接字创建2 2)IPIP首部控制首部控制Bind功能:指定从这个原始套接字发送的所有数据报的源功能:指定从这个原始套接字发送的所有数据报的源IP地址地址作用范围:原始套接字不存在端口号概念,作用范围:原始套接字不存在端口号概念,bind函数函数仅仅设置本地地址仅
9、仅设置本地地址Connect功能:指定从这个原始套接字发送的所有数据报的宿功能:指定从这个原始套接字发送的所有数据报的宿IP地址地址作用范围:原始套接字不存在端口号概念,作用范围:原始套接字不存在端口号概念,connect函数仅设置远端函数仅设置远端IP地址地址原始套接字创建原始套接字创建3 3)端点地址关联)端点地址关联原始套接字输入原始套接字输入接收到的内容接收到的内容包括包括IP头部在内的完整数据报(头部在内的完整数据报(IPv4)原始套接字输入原始套接字输入接收到的类型接收到的类型原始套接字输入原始套接字输入接收到的类型接收到的类型包括包括IP头部在内的完整数据报(头部在内的完整数据报
10、(IPv4)UDP分组和分组和TCP分组分组片段分组片段分组=内核处理后的内核处理后的ICMP、IGMP分组分组=不认识其协议字段的所有不认识其协议字段的所有IP数据报数据报SOCKET(协议):匹配数据报的协议字段(协议):匹配数据报的协议字段Bind:匹配数据报的宿:匹配数据报的宿IP地址地址Connect:匹配数据报的源:匹配数据报的源IP地址地址内核把哪些接收到的内核把哪些接收到的IP数据报传递到原始套接口?数据报传递到原始套接口?一个原始套接口能够收到哪些数据?一个原始套接口能够收到哪些数据?原始套接字输入原始套接字输入既然原始套接字能够接收到的数据报文是有限制既然原始套接字能够接收
11、到的数据报文是有限制的,那么如何在第一个层次上扩展原始套接口被的,那么如何在第一个层次上扩展原始套接口被复制的数据种类呢?复制的数据种类呢?套接字控制命令SIO_RCVALL使用方法1. 创建原始套接字,由于IPv6尚未实现SIO_RCVALL,因而套接字地址簇必须是AF_INET,协议必须是IPPROTO_IP;2. 将套接字绑定到指定的本地接口;3. 调用WSAIoctl为套接字设置SIO_RCVALL I/O控制命令;4. 调用接收函数,捕获IP数据报。原始套接字输入原始套接字输入使用原始套接字接收数据是在无连接的方使用原始套接字接收数据是在无连接的方式下进行数据接收,原始套接字很可能接
12、式下进行数据接收,原始套接字很可能接收到很多非预期的数据报收到很多非预期的数据报考虑数据过滤能力原始套接字输出原始套接字输出发送数据的目标发送数据的目标连接模式:在连接模式:在connect中指明中指明非连接模式:在非连接模式:在sendto中指明中指明发送数据的内容发送数据的内容IP首部UDP首部UDP数据IP_HDRINCL选项未开启未开启IP_HDRINCL选项开启开启a)IPv4标志字段可置标志字段可置0,告知内核设置,告知内核设置b)IPv4头部校验和字段置头部校验和字段置0,总是由内核计算并存储,总是由内核计算并存储c)IPv4选项字段可选选项字段可选原始套接字输出原始套接字输出i
13、nt sendto(SOCKET s, const char FAR* buf, int len, int flags, const struct sockaddr FAR* to, int tolen)发送数据发送数据sendtosendtoBuf的内容:的内容: 增加了与原始套接字定义相关的协议首部,如增加了与原始套接字定义相关的协议首部,如IP头、头、UDP头、头、TCP头、头、ICMP头等。头等。 如果指明了如果指明了IP_HDRINCL选项,则包括选项,则包括IP头;头; 否则协议头部信息与否则协议头部信息与socket函数函数protocol 字段相符。字段相符。WindowsWi
14、ndows对原始套接字的限制对原始套接字的限制在在Windows7、Windows Vista、Windows XP SP2和和Windows XP SP3中,通过原始套接字发送数中,通过原始套接字发送数据的能力受到了诸多限制,这些限制主要包括:据的能力受到了诸多限制,这些限制主要包括:TCP的数据不能通过原始套接字发送;的数据不能通过原始套接字发送;如果源如果源IP地址不正确,则地址不正确,则UDP的数据不能通过原始套接字发送。所谓的数据不能通过原始套接字发送。所谓不正确是指为数据报设置的源地址不属于本机有效的不正确是指为数据报设置的源地址不属于本机有效的IP地址,这样限制地址,这样限制了恶意代码通过伪造源了恶意代码通过伪造源IP地址进行拒绝服务攻击的能力,同时还限制了地址进行拒绝服务攻击的能力,同时还限制了发送发送IP欺骗数据包的能力;欺骗数据包的能力;当设置协议类型为当设置协议类型为IPPROTO_TCP时,不允许将原始套接字绑定到本时,不允许将原始套接字绑定到本地地址(当协议类型为其它协议时,绑定是允许的)。地地址(当协议类型为其它协议时,绑定是允许的)。Windows
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年箱体零件修复操作工考试试卷及答案
- 2026年北京市公务员招考申论公共法律服务下沉基层模拟试卷及答案
- 中秋月饼产品宣传策划
- 血液科化疗药物外渗导致静脉炎的预防与护理
- 2026年保密工作管理规范考试试卷试题及答案
- 2026年护理分级制度落实实务考试试卷试题及答案
- 2026年国家基本公共卫生服务培训考试试题(含答案)
- 2026年反洗钱知识竞赛考试题库及答案
- 2026年人教PEP版三年级下册英语Unit2能力达标检测试卷及答案
- 网络安全管理员安全应急测试考核试卷含答案
- DB51-T 3387-2026 四川盆地城市工业有机废气活性炭治理技术规范
- 2026年机关事业单位工勤技能岗位等级考试《三级汽车驾驶与维修员》汽车驾驶3
- 淡水水产养殖项目水资源论证报告书
- 测绘安全作业培训内容
- 中外合作办学审计制度
- 2025年华电集团机械笔试及答案
- 公路工程施工人员三级安全教育培训方案
- 《新污染物治理技术》-课件 第1-6章 新污染物简介- 新污染物芬顿氧化去除技术
- 犬咬伤急救常识的课件
- UPS培训-UPS基础知识课件
- 小学六年级秋季学期《语文》(统编版)学习任务单(全册汇总)
评论
0/150
提交评论