| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> Linux 下C/C++实现发送ICMP和ICMPv6(报文分析) -> 正文阅读 |
|
[系统运维]Linux 下C/C++实现发送ICMP和ICMPv6(报文分析) |
当终端系统无法到达目的地的IP数据包时,为了方便获取诊断信息。一种称为Internet控制消息协议(ICMP)的特殊协议与IP结合使用,以提供与IP协议层配置和IP数据包处理相关的诊断和控制信息。主要的原因是IP协议没有内置机制,在源设备发送的数据包无法到达目标时通知源设备。对于错误报告和控制,它取决于ICMP协议。 ICMP和ICMPv6的报头格式 下图显示了ICMPv4和ICMPv6消息的格式。前4个字节对所有消息都具有相同的格式,但其余的字节因消息而异。 类型字段用于确定特定的报文,ICMPv4和ICMPv6的该字段值并不相同;代码字段进一步肯定报文的含义,ICMPv4和ICMPv6的该字段值并不相同;校验和字段用于确定报文信息的正确性。
我们日常使用最多的ping,就是响应请求(Type=8)和应答(Type=0),一台主机向一个节点发送一个Type=8的ICMP报文,如果途中没有异常(例如被路由器丢弃、目标不回应ICMP或传输失败),则目标返回Type=0的ICMP报文,说明这台主机存在,更详细的tracert通过计算 ICMP报文通过的节点来确定主机与目标之间的网络距离。
路由器广告和路由器请求统称为路由器发现。最常见的错误消息类型包括:
类型字段值为128 ,表示该ICMPv6信息报文中的回送请求报文。代码字段在发送端置为0校验和字段在计算之前被置0.标识字段与序列号字段用于在回送请求报文与回送应答报文之间建立对应关系。数据字段是诊断的内容,为8b的整数倍。 在ICMPv6中,与ICMPv4中一样,消息被分组为信息类和错误类。 然而,在ICMPv6中,所有错误消息的类型字段的高位都有一个0。因此,ICMPv6类型0到127都是错误,类型128到255都是信息性的。许多信息性消息是请求/回复对。 Linux发送ECHO request消息C/C++代码实现
发送回显请求将一个ICMP(IPv4)或ICMPv6(IPv6)回显请求分别发送到一个地址列表,而无需等待回显回复数据包。每0.5秒发送一个数据包。或者,在无限循环中重复发送数据包。 运行结果:
./send_echo_request -q --loop 39.156.66.10 使用-q选项可以抑制信息回显在终端。 tcpdump抓取ICMP ECHO request消息:
总结 在IPv4中,Internet控制报文协议ICMP向源节点报告关于向目的地传输IP数据包过程中的错误和信息。在IPv6中,ICMPv6除了提供ICMPv4常用的功能之外,还是其它一些功能的基础,如邻接点发现、无状态地址配置(包括重复地址检测)、PMTU发现等。最后写个测试例子来发送回显请求,并且进行抓包分析。有助于理解ICMP和ICMPv6 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 18:26:56- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |