- 1、本文档共114页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第六讲 原始套接字与数据链路访问
第六讲原始套接字与数据链路访问 任立勇 电子科技大学计算机学院 目 录 TCP/IP协议族结构 IP数据报格式 原始套接字 一个简单的DOS攻击程序 Ping协议的ICMP版本 Traceroute程序 数据链路层访问技术 一个数据链路访问的例子 TCP/IP协议族结构 IPv4数据报格式 几点说明:首部长度是以32位(即4字节)为单位;16位的标识用于分片和重组;DF位(不分片);MF(还有片段);协议字段表示封装在IP报文中的上层协议,典型的有:ICMP(1)、IGMP(2)、TCP(6)、UDP(17);头部校验和只对IP头部(包括选项)计算,校验算法是标准的因特网校验和算法,即简单的16位反码求和。 IP数据报分片例子 IP数据报是指I P 层端到端的传输单元(在分片之前和重新组装之后),分组是指在I P 层和链路层之间传送的数据单元。 需要重申的是,任何传输层首部只出现在第1 片数据中。 原始套接字(概述) 原始套接字提供了一些使用tcp和udp协议不能实现的功能,如: 使用原始套接字可以读/写ICMPv4、IGMPv4分组。如Ping程序,mroute程序等; 使用原始套接字可以读/些特殊的IPv4数据包,内核不处理这些数据报的IPv4协议字段。如大多数内核只处理ICMP、IGMP、TCP、UDP的数据报。但协议字段还可以为其他值,如OSPF直接使用IP协议,将IP数据报的协议字段设为89,此时,就必须有专门的程序通过原始套接字来处理它们; 利用原始套接字还可以创建自定义的IP数据报首部,编写基于IP协议的高层网络协议。 原始套接字创建 #include sys/socket.h #include netinet/in.h int socket(AF_INET, SOCK_RAW, int protocol); protocol参数一般不能为0,如:IPPROTO_ICMP。另外,只有超级用户才能创建原始套接字。 用户可以通过设置IP_HDRINCL选项来编写自己的IP数据报首部: const int on = 1; setsockopt(sockfd, IPPROTO_IP, IP_HDRINCL, on, sizeof(on)); 可以调用bind函数绑定原始套接字的本地IP地址,此时,所有输出的数据报将用到源IP地址(仅当IP_HDRINCL未设置时);如果不调用bind函数,由内核将源IP地址设成外出接口的主IP地址; 可以调用connect函数设置数据报的目的地址(注意并不需要真正的连接)。此后,可直接调用write或send。 注意:bind和connect时,端口已经没有意义了。 通过原始套接字发送数据报 原始套接字的输出遵循以下规则: 如果套接字已经连接,可以调用write、writev、send来发送数据,否则需要调用sendto或sendmsg; 如果IP_HDRINCL选项未设置,则内核写的数据起始地址指IP头部之后的第一个字节。因为这种情况下,内核构造IP头部,并将它安在来自进程的数据之前。内核将IPv4头部的协议字段设置成用户在调用socket函数所给的第三个参数; 如果设置了IP_HDRINCL,则内核写的数据起始地址指IP头部的第一个字节。用户所提供的数据大小值必须包括头部的字节数。此时进程构造除了以下两项外的整个IP头部;(a)IPv4标识字段可以设为0,要求内核设置该值;(b)IPv4头部校验和由内核来计算和存储。IPv4数据报首部各个字段的内容均是网络字节序(对linux而言) 对于超出外出接口的MTU的分组,内核将其分片。 通过原始套接字接收数据报 内核通过原始套接字接收数据报,遵循以下规则: 接收到的tcp和udp分组决不会传递给原始套接字,如果一个进程希望读取包含tcp或udp分组的IP数据报,那么它们必须在数据链路层读入; 当内核处理完ICMP消息后,绝大部分ICMP分组将传递给原始套接字。对源自Berkeley的实现,除了回射请求、时间戳请求和地址掩码请求将完全由内核处理以外,所有收到的ICMP分组将传递给某个原始套接口; 当内核处理完IGMP消息后,所有IGMP分组都将传递给某个原始套接字; 所有带有内核不能识别的协议字段的IP数据报都将传递给某个原始套接字。 如果数据报以分片形式到达,则该分组将在所有片段到达并重组后才传给原始套接字。 通过原始套接字接收数据报(续) 在将一个IP数据报传递给某个套接字之前,内核需要选择匹配的原始套接字: 如果在创建原始套接字时,所指定的protocol参数不为0,则接收到的数据包的协议字段应与该值匹配,否则该数据报将不传递给该套接字; 如果此原始套接字之上绑定了一个本地IP地址,那么接收到的数据报的目的IP地址应与该绑定地址
您可能关注的文档
- 第六单元课题1(第2课时).ppt
- 第六单元《碳的化学性质》讲课课件.ppt
- 第六届越南.doc
- 第六单元2《杠杆和其他简单机械》.ppt
- 第六感之谜.ppt
- 第六单元_课题2二氧化碳制取的研究.ppt
- 第六章 汽车空调的维护保养.ppt
- 第六单元 第一章 第一节 尝试对生物进行分类课件 新人教版.ppt
- 第八章海岸地貌.2地貌学高等教育出版社.ppt
- 第六章 常见的沟通方式.doc
- 人教版九年级英语全一册单元速记•巧练Unit13【速记清单】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit9【速记清单】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit11【速记清单】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit14【单元测试·提升卷】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit8【速记清单】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit4【单元测试·提升卷】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit13【单元测试·基础卷】(原卷版+解析).docx
- 人教版九年级英语全一册单元速记•巧练Unit7【速记清单】(原卷版+解析).docx
- 苏教版五年级上册数学分层作业设计 2.2 三角形的面积(附答案).docx
- 人教版九年级英语全一册单元速记•巧练Unit12【单元测试·基础卷】(原卷版+解析).docx
最近下载
- 2024年中国石油秋季招聘通用能力考试笔试备考试题及答案解析.docx
- 第一课 教室盆栽我做主—盆栽养护 课件 浙科版综合实践活动四年级上册.pptx
- 医疗安全(不良)事件根本原因分析法活动指南.pdf VIP
- 2023年中考押题预测卷02(杭州卷)-英语(考试版)A4.docx
- 于品 清华丘班数学分析讲义.pdf VIP
- 金融风险管理(中央财经大学)中国大学MOOC(慕课)章节测验试题(答案).pdf
- 一年一度喜剧大赛江东鸣《先生请出山》完整台词.docx VIP
- 党员立足本职岗位发挥党员先锋引领作用发言稿.doc VIP
- 《机床电气控制》M7130型卧轴矩台平面磨床的电气控制.pdf VIP
- Unit 4 Period 4 Developing Ideas 课件-高一上学期英语课件(外研社2019必修第一册).pptx
文档评论(0)