




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
ICMP协议编程 武汉科锐 1 ICMP协议简介 ICMP协议是InternetControlMessageProtocol 网际控制消息协议 的缩写 它是由RFC792文件定义的 ICMP协议用于处理错误消息和控制消息 当一个IP数据报在网络上的传输发生错误时 错误发送点的主机或路由器往往通过一个ICMP消息来通知数据报的发送者 ICMP错误消息在以下几种情况下发送 数据报不能到达目的地时 网关已经失去缓存功能 网关能够引导主机在更短路由上发送 虽然ICMP协议用于传递错误消息 但它的本意并不是由此让IP协议变得可靠 而是仅为了当网络出现问题的时候能够返回信息而已 ICMP协议使用IP协议做底层支持 当一个程序发送ICMP数据包的时候 这个数据包最后是被封装进一个IP数据报中传递的 从这个意义上看 ICMP协议似乎应该和TCP和UDP等传输层协议处于同一个层次 但是实际上它被定义在Internet层上 这是因为ICMP协议是当做IP协议的附属协议定义的 它由IP模块来实现 而且更多的情况下是被IP模块自己用来传输错误消息 所以在图15 1的TCP IP模型中 ICMP协议是在IP协议的一个角上 ICMP协议是无连接的 而且并不使用端口进行复用 从编程角度来看 只要发送端完成ICMP报文的封装并指定一个IP地址发送出去 这个报文就可以像UDP包一样自己到达目标地址 2 ICMP报文的类型 structicmp hdr BYTEicmp type 类型BYTEicmp code 代码WORDicmp cksum 校验和WORDicmp id WORDicmp seqWORDicmp data 其中icmp type和icmp code字段用来指定这个ICMP报文的用途 icmp cksum字段为整个报文的校验和 接下来的几个字段icmp id icmp seq和icmp data的定义可能是不确定的 因为它们实际上属于报文内容的一部分 而不同用途的报文其内容的定义方式是不同的 3 ICMP报文用于传递错误消息和控制消息 错误消息是当发出的IP报文段在网络上出现某种错误的时候 由错误发生点的设备发回来的 而控制消息用于当前主机主动向其他设备发送一个ICMP查询消息 对方会根据这个消息送回相应的回复消息 如Ping程序发送的就是 请求回显 ICMP消息 对方主机收到后送回一个 回显应答 ICMP消息 用于查询的ICMP消息是一一对应的 如向其他主机发送 请求回显 消息 得到的回应会是 回显应答 消息 而发送 时间戳请求 的话 得到的回应会是 时间戳应答 消息 地址掩码应答 消息是和 地址掩码请求 消息对应的 Ping程序正是通过向其他主机发送 请求回显 消息 然后根据能否收到 回显应答 消息来判断目标主机是否在线的 4 校验和的计算 在发送ICMP报文的时候 必须由程序自己计算ICMP报文的校验和并将它填入ICMP首部的对应字段中 如果校验和错误的话 这个ICMP报文到达下一个路由器的时候就会被认为是在传输中发生错误而丢弃 校验和的计算方法是将数据以字为单位累加到一个双字中 如果数据的长度是奇数 那么最后一个字节将被扩展到字以后再进行累加 累加的结果是32位的 而ICMP首部的校验和字段是16位的 校验和最终被定义为将累加结果的高16位和低16位相加后取反 在计算校验和之前 ICMP首部中的校验和字段要被首先设置为0 5 主机名的解析 structhostent FARgethostbyname constchar name typedefstructhostent charFAR h name charFARFAR h aliases shorth addrtype shorth length charFARFAR h addr list hostent 6 用原始套接字收发ICMP报文 系统会为使用IPPROTO ICMP协议的SOCK RAW类型的原始套接字添加IP首部 但是接收的时候会返回包括IP首部的数据包 Socket AF INET SOCK RAW IPPROTO ICMP 创建原始套接字 7 用原始套接字收发ICMP报文 为了能够计算出一个Ping动作所花的时间 程序使用GetTickCount函数来获取当前系统的时间值并将它当做报文内容放入icmp data位置 由于对方主机在处理 请求回显 查询时会将报文内容原封不动地封装在 回显应答 报文中返回 所以到接收到报文的时候再次调用GetTickCount函数并将时间相减就可以得出报文来回在路上所花的时间了 填写好报文数据后 程序调用 CalcCheckSum子程序计算整个报文的校验和并将结果填入ICMP首部的icmp cksum字段中 最后通过sendto函数发往目标主机 如果sendto函数返回SOCKET ERROR 表示ICMP报文无法发送到目标主机 这时程序将显示 Destinationhostunreachable 错误 如果ICMP报文被成功发送 那么程序使用select函数等待一秒 如果在一秒内没有数据可供接收则视为目标主机没有应答 这时将在控制台窗口中显示 Requesttimedout 错误 最理想的结果就是select告诉程序有数据可供接收 这说明可能是目标主机有应答了 这时程序使用recvfrom函数来接收数据 由于ICMP协议并不提供端口复用 所以接收的数据有时并不是接收方所要的 比如有一个Ping程序在探测主机A 而我们又开了另一个命令行窗口并执行Ping exe去探测主机B 那么主机B返
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2026学年阿坝藏族羌族自治州若尔盖县数学三上期末学业质量监测试题含解析
- 2024年鹰潭市贵溪市三年级数学第一学期期末质量检测试题含解析
- 2024年丽江地区玉龙纳西族自治县三年级数学第一学期期末学业质量监测模拟试题含解析
- 2024年佳木斯市数学三年级第一学期期末监测模拟试题含解析
- 公共营养师培训之第五章 技能课件
- 2025年临床操作考核试题及答案
- 文化交流中的价值观碰撞与融合试题及答案
- 职业道德案例分析试题及答案
- 主管护师考试创新思维试题及答案
- 主管护师考试策略与试题及答案
- 水务公司笔试题目及答案
- 2025年北京市西城区高三二模生物试卷(含答案)
- 2025届浙江省学军、镇海等名校高考英语二模试卷含解析
- 2025-2030功能性饮料项目商业计划书
- 致敬英雄张富清
- GB/T 45501-2025工业机器人三维视觉引导系统通用技术要求
- 2025年武汉数学四调试题及答案
- GB 19081-2025饲料加工系统粉尘防爆安全规范
- 2024年云南省初中学业水平考试地理试卷含答案
- 2024年全国高中数学联赛北京赛区预赛一试试题(解析版)
- 培训课件 -沟通的方法 -沟通训练营 脱不花
评论
0/150
提交评论