Go   发布时间:2022-04-09  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Golang实现ping大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

ICMP部分的结构

@H_450_5@报头

ICMP报头从IP报头的第160位开始,即第20个字节开始(除非使用了IP报头的可选部分)。

Bits 160-167 168-175 176-183 184-191
160 Type Code 校验码(checksum)
192 ID 序号(sequence)
  • Type- ICMP的类型,标识生成错误报文;
  • Code- 进一步划分ICMP的类型,该字段用来查找产生错误的原因.;例如,ICMP的目标不可达类型可以把这个位设为1至15等来表示不同的意思。
  • checksum- 校验码部分,这个字段包含有从ICMP报头和数据部分计算得来的,用于检查错误的数据,其中此校验码字段的值视为0。
  • ID- 这个字段包含了ID值,在Echo Reply类型的消息中要返回这个字段。
  • Sequence- 这个字段包含一个序号,同样要在Echo Reply类型的消息中要返回这个字段。

可能的消息列表(不是全部)

@H_333_25@mobile Registration request @H_333_25@mobile Registration Reply
类型 代码 描述
0 -Echo Reply 0 echo响应 (被程序ping使用)
1 and 2 保留
3 - 目的地不可到达 目标网络不可达
1 目标主机不可达
2 目标协议不可达
3 目标端口不可达
4 要求分段并设置DF flag标志
5 源路由失败
6 未知的目标网络
7 未知的目标主机
8 源主机隔离
9 禁止访问的网络
10 禁止访问的主机
11 对特定的TOS 网络不可达
12 对特定的TOS 主机不可达
13 网络流量被禁止
4 - ICMP拥塞控制 拥塞控制
5 - 路径控制 重定向网络
重定向主机
基于TOS 的网络重定向
基于TOS 的主机重定向
Alternate Host Address
保留
8 -Echo Request Echo请求
9 - 路由器通告 路由建议
10 - 路由器请求 路由器的发现/选择/请求
11 - ICMP 超时 TTL 超时
分片重组超时
12 - 参数错误 IP 报首部参数错误
丢失选项
@L_197_20@的长度
13 - 时间戳请求 时间戳请求
14 - 时间戳应答 时间戳应答
15 - 信息请求 信息请求(已弃用)
16 - 信息应答 信息应答(已弃用)
17 - 地址掩码请求 地址掩码请求
18 - 地址掩码应答 地址掩码应答
19 因安全原因保留
20 至 29 Reservedfor robustness experiment
30 - Traceroute 信息请求
31 数据报转换出错
32 手机网络重定向
33 Where-Are-You(originally meant forIPv6
34 Here-I-Am(originally meant for IPv6)
35
36
37 Domain Name request
38 Domain Name Reply
39 SKIP Algorithm Discovery Protocol,Simple Key-Management for Internet Protocol
40 Photuris,Security @R_279_4895@
41 ICMP for experimental mobility protocols such asSeamoby[RFC4065]
42 到 255 保留

@H_333_403@ @H_637_404@在使用Go语言的net.Dial函数时,发送echo request报文时,不用虑i前20个字节的ip头;但是在接收到echo response消息时,前20字节是ip头。后面的内容才是icmp的内容,应该与echo request的内容一致。

大佬总结

以上是大佬教程为你收集整理的Golang实现ping全部内容,希望文章能够帮你解决Golang实现ping所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。