




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
ICMP 原理与代码及分析 专业 班级 学号 姓名 一 一 ICMP 协议简介协议简介 ICMP 全称 Internet Control Message Protocol 中文名为因特网控制报文协议 它工作在 OSI 的网络层 向数据通讯中的源主机报告错误 ICMP 可以实现故障隔离和故障恢复 网络本身是不可靠的 在网络传 输过程中 可能会发生许多突发事件并导致数据传输失败 网络层的 IP 协议是一个无连接的协议 它不 会处理网络层传输中的故障 而位于网络层的 ICMP 协议却恰好弥补了 IP 的缺限 它使用 IP 协议进行信 息传递 向数据包中的源端节点提供发生在网络层的错误信息反馈 ICMP 的报头长 8 字节 结构如图 1 所示 比特 0 7 8 15 16 比特 31 类型 0 或 8 代码 0 检验和 首部其余部分 未使用 数据 图 1 ICMP 报头结构 类型类型 标识生成的错误报文 它是 ICMP 报文中的第一个字段 代码代码 进一步地限定生成 ICMP 报文 该字段用来查找产生错误的原因 校验和校验和 存储了 ICMP 所使用的校验和值 未使用未使用 保留字段 供将来使用 起值设为 0 数据数据 包含了所有接受到的数据报的 IP 报头 还包含 IP 数据报中前 8 个字节的数据 ICMP 协议提供的诊断报文类型如表 1 所示 种类种类类型类型描述描述 3目的端不可达 4源点抑制 11超时 12参数问题 差错报文 5改变路由 8 或 0回显请求或应答 13 或 14时间戳请求或应答 17 或 18地址掩码请求或应答 查询报文 10 或 9路由询问和通告 表 1 ICMP 诊断报文类型 ICMP 提供多种类型的消息为源端节点提供网络层的故障信息反馈 它的报文类型可以归纳为以下 5 个大 类 诊断报文 类型 8 代码 0 类型 0 代码 0 目的不可达报文 类型 3 代码 0 15 重定向报文 类型 5 代码 0 4 超时报文 类型 11 代码 0 1 信息报文 类型 12 18 二 编程实现发送二 编程实现发送 ICMP 协议数据包协议数据包 代码功能 实现发送 ICMP 协议数据包 从而实现 DOS 下 ping 命令功能 1 代码简要分析代码简要分析 代码执行步骤 1 创建协议类型为 IPPROTO ICMP 的原始套接字 设置套接字的属性 2 创建并初始化 ICMP 封包 3 调用 sendto 函数向远程主机发送 ICMP 的请求 4 调用 recvfrom 函数接受 ICMP 响应 初始化 ICMP 头时先初始化消息的类型和代码域 之后应该是回显请求头 程序首先定义了 ICMP 头 的数据结构 ICMP HDR typedef struct icmp hdr unsigned char icmp type 消息类型 unsigned char icmp code 代码 unsigned short icmp checksum 校验和 下面是回显头 unsigned short icmp id 用来惟一标识此请求的 ID 号 通常设置为进程 ID unsigned short icmp sequence 序列号 unsigned long icmp timestamp 时间戳 ICMP HDR PICMP HDR 2 完整代码及解析完整代码及解析 include common initsock h include common protoinfo h include common comm h include CInitSock theSock typedef struct icmp hdr unsigned char icmp type 消息类型 unsigned char icmp code 代码 unsigned short icmp checksum 校验和 下面是回显头 unsigned short icmp id 用来惟一标识此请求的 ID 号 通常设置为进程 ID unsigned short icmp sequence 序列号 unsigned long icmp timestamp 时间戳 ICMP HDR PICMP HDR int main 目的 IP 地址 即要 Ping 的 IP 地址 char szDestIp 192 168 1 104 127 0 0 1 创建原始套节字 SOCKET sRaw socket AF INET SOCK RAW IPPROTO ICMP 设置接收超时 SetTimeout sRaw 1000 TRUE 设置目的地址 SOCKADDR IN dest dest sin family AF INET dest sin port htons 0 dest sin addr S un S addr inet addr szDestIp 创建 ICMP 封包 char buff sizeof ICMP HDR 32 ICMP HDR pIcmp ICMP HDR buff 填写 ICMP 封包数据 pIcmp icmp type 8 请求一个 ICMP 回显 pIcmp icmp code 0 pIcmp icmp id USHORT GetCurrentProcessId pIcmp icmp checksum 0 pIcmp icmp sequence 0 填充数据部分 可以为任意 memset 开始发送和接收 ICMP 封包 USHORT nSeq 0 char recvBuf 1024 SOCKADDR IN from int nLen sizeof from while TRUE static int nCount 0 int nRet if nCount 4 break pIcmp icmp checksum 0 pIcmp icmp timestamp GetTickCount pIcmp icmp sequence nSeq pIcmp icmp checksum checksum USHORT buff sizeof ICMP HDR 32 nRet sendto sRaw buff sizeof ICMP HDR 32 0 SOCKADDR if nRet SOCKET ERROR printf sendto failed d n WSAGetLastError return 1 nRet recvfrom sRaw recvBuf 1024 0 sockaddr if nRet SOCKET ERROR if WSAGetLastError WSAETIMEDOUT printf timed out n continue printf recvfrom failed d n WSAGetLastError return 1 下面开始解析接收到的 ICMP 封包 int nTick GetTickCount if nRet icmp type 0 回显 printf nonecho type d recvd n pRecvIcmp icmp type return 1 if pRecvIcmp icmp id GetCurrentProcessId printf someone else s packet n return 1 printf d bytes from s nRet inet ntoa from sin addr printf icmp seq d pRecvIcmp icmp sequence printf time d ms nTick pRecvIcmp icmp timestamp printf n Sleep 1000 return 0 三 代码结果分析三 代码结果分析 运行代码结果 源地址 192 168 1 101 目的地址 192 168 1 104 DOS 下使用 ping 命令 ping 192 168 1 104 结果 源地址 192 168 1 101 目的地址 192 168 1 104 由图可以分析出代码实现功能与 ping 命令功能类似 即代码会构建一个固定格式的 ICMP 请求数据 包 然后由 ICMP 协议将这个数据包连同地址 192 168 1 104 一起交给 IP 层协议 IP 层协议将以地 址 192 168 1 104 作为目的地址 本机 IP 地址 192 168 1 101 作为源地址 加上一些其他的控制信 息 构建一个 IP 数据包 并想办法得到 192 168 1 104 的 MAC 地址 物理地址 这是数据链路层协 议构建数据链路层的传输单元 帧所必需的 以便交给数据链路层构建一个数据帧 关键就在这 里 IP 层协议通过机器 B 的 IP 地址和自己的子网掩码 发现它跟自己属同一网络 就直接在本网络 内查找这台机器的 MAC 如果以前两机有过通信 在 A 机的 ARP 缓存表应该有 B 机 IP 与其 MAC 的映 射关系 如果没有 就发一个 ARP 请求广播 得到 B 机的 MAC 一并交给数据链路层 后者构建一个 数据帧 目的地址是 IP 层传过来的物理地址 源地址则是本机的物理地址 还要附加上一些控制信 息 依据以太网的介质访问规则 将它们传送出去 主机 B 收到这个数据帧后 先检查它的目的地址 并和本机的物理地址对比 如符合 则接收 否则 丢弃 接收后检查该数据帧 将 IP 数据包从帧中提取出来 交给本机的 IP 层协议 同样 IP 层检查 后 将有用的信息提取后交给 ICMP 协议 后者处理后 马上构建一个 ICMP 应答包 发送给主机 A 其过程和主机 A 发送 ICMP 请求包到主机 B 一模一样 由 wireshark 抓包 我们可以更清楚的看到两者的相似处 Wires
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 智算中心扩建项目施工方案
- 水库工程环境影响报告书
- 离职技术人员知识产权归属与离职后技术成果转化协议
- 大宗固废减量化处理系统建设方案
- 建筑民宅方案设计图
- 2025年小学二级试卷及答案
- 法制员专业面试题及答案
- 2025年华杯赛初一试题及答案
- DB65T 4394-2021 籽用南瓜高产栽培技术规程
- 新能源2025年危机公关处理案例:技术创新与策略实施指南报告001
- 无锡信捷校招笔试题目及答案
- 模具厂合伙协议合同协议
- 直播分成合同协议
- 【9化一模】2025年安徽省合肥市包河区中考一模化学试卷(含答案)
- (新版)中国心理卫生协会心理咨询师考试复习题库(浓缩400题)
- 塑料软包装质量安全管理制度2024.05
- 2025-2030中国妇科中成药市场营销趋势及投融资发展状况研究报告
- T-CNAS 12-2020 成人经口气管插管机械通气患者口腔护理
- 艾滋病防治知识宣传
- 危重患者肠内营养的护理
- 2024年全国职业院校技能大赛高职组(建筑工程识图赛项)考试题库(含答案)
评论
0/150
提交评论