当前位置: 首页 > news >正文

微信公众号的h5网站开发6哔哩哔哩网页版在线观看网址

微信公众号的h5网站开发6,哔哩哔哩网页版在线观看网址,广告图案大全图片,微信公众平台开发代理目录 一、概述 二、ICMP报文格式详解 2.1 什么是ICMP 2.2 ICMP报文格式 2.3 ICMP报文类型 2.4 实际报文举例 三、使用go实现icmp请求以及接收响应内容 一、概述 本文主要旨在学习icmp报文格式#xff0c;以及通过go语言来实现ICMP发包。 二、ICMP报文格式详解 2.1 什…目录 一、概述 二、ICMP报文格式详解 2.1 什么是ICMP 2.2 ICMP报文格式 2.3 ICMP报文类型 2.4 实际报文举例 三、使用go实现icmp请求以及接收响应内容 一、概述 本文主要旨在学习icmp报文格式以及通过go语言来实现ICMP发包。 二、ICMP报文格式详解 2.1 什么是ICMP 因特网控制报文协议ICMPInternet Control Message Protocol是一个差错报告机制是TCP/IP协议簇中的一个重要子协议通常被IP层或更高层协议TCP或UDP使用属于网络层协议主要用于在IP主机和路由器之间传递控制消息用于报告主机是否可达、路由是否可用等。这些控制消息虽然并不传输用户数据但是对于收集各种网络信息、诊断和排除各种网络故障以及用户数据的传递具有至关重要的作用。ICMP的功能是检错而不是纠错。 2.2 ICMP报文格式 CMP报文包含在IP数据报中属于IP的一个用户IP头部就在ICMP报文的前面所以一个ICMP报文包括IP头部、ICMP头部和ICMP报文IP头部的Protocol值为1就说明这是一个ICMP报文ICMP头部中的类型Type域用于说明ICMP报文的作用及格式此外还有一个代码Code域用于详细说明某种ICMP报文的类型所有数据都在ICMP头部后面 type类型1字节报文类型用来标识报文code代码1字节提供报文类型的进一步信息checksum校验和2字节使用和IP相同的加法校验和算法但是icmp校验仅覆盖ICMP报文Message body数据部分长度可变字段的长度的和内容取决于消息的类型和代码 2.3 ICMP报文类型 1、类型比对表 typecode描述查询/差错0--Echo应答响应0Echo Reply -- 回显应答Ping应答        查询3--目的不可达0 Network Unreachable -- 网络不可达 差错1Host Unreachable -- 主机不可达差错2Protocol Unreachable --协议不可达差错3Port Unreachable --端口不可达差错4Fragmentation needed but no frag. bit set--要求分段并设置DF flag标志报文差错5Source routing failed --源路由失败报文差错6Destination network unknown --目的网络未知差错7Destination host unknown --目的主机未知差错8Source host isolatedobsolete--源主机被隔离作废不用差错9Destination network administratively prohibited -- 目的网络被强制禁止差错10Destination host administratively prohibited --目的主机被强制禁止差错11Network unreachable for TOS --对特定的TOS网络不可达报文差错12Host unreachable for  TOS --对特定的TOS主机不可达报文差错13Communiation administratively prohibited by filtering --由于过滤 网络流量被禁止报文差错14Host precedence violation --主机越权报文差错15Precedence cutoff ineffect --优先权终止生效报文差错4--流量控制0Source quench --源端被关闭基本流控制差错5--重定向0Redirect for network --对网络重定向差错1Redirect for host --主机重定向差错2Redirect for TOS and network --对服务类型和网络重定向差错3Redirect for TOS and host --对服务类型和主机重定向差错8--Echo请求0Echo request -- 回显请求ping请求查询9-路由器通告0Router advertisement --路由器通告查询10--路由器请求0Route solicitation --路由器的发现/选择/请求报文查询11--ICMP超时0TTL equals 0 during transit --传输期间生存时间为0差错1TTL equals 0 during reassembly --在数据报组装期间生存时间为0差错12--参数问题0IP header bad(catchall error) --坏的IP首部包括各种差错差错1Required options missing --缺少必须的选项差错2不支持的长度报文差错13--时间戳请求0Timestamp request(obsolete) --时间戳请求作废不用查询14--时间戳应答Timestamp reply(obsolete) --时间戳应答作废不用查询15--信息请求Information request(obsolete) --信息请求作废不用查询16--信息应答0Information reply(obsolete) --信息应答作废不用查询17--掩码请求0Address mask request --地址掩码请求查询18--掩码应答0Address mask reply --地址掩码应答查询 2、ICMP分类 差错报文 ①目的不可达 目的不可达的类型字段值为3代码字段有为0-15也就是说若将目的不可达的ICMP报文再做一个细分会将目的不可达的原因分为16种并用不同ICMP差错报文进行表示。 code0代表着网络不可达出现这个ICMP差错报文就代表着报文在路由过程的时候出现了问题比如报文的目的网络在路由器上没有相应的条目于是该路由器就回送网络不可达的报文code1代表主机不可达这个报文的来源一般是目的主机所处的网关发送的因为目的主机所处的网关没有找到对应的目的主机的IP地址而无法转交该数据报文所以将数据报文丢弃并回送该ICMP差错报文。code2代表着协议不可达这就说明数据交互的双方在协议上的出现了问题。code3;代表着端口不可达这就说明数据包上指定的目的端口在目的主机上可能没有监听code4;代表一个原本需要分片的数据包但是IP头部上的表示是不进行分片由此就出现了错误。比如我们可以设置自己的网卡的MTU大小比网关的MTU大那么我们发送过去的数据在被网关接收后可能会出现错误因为网关网卡的最大接收MTU数比发送过来的数据包小而且这个数据包还标识不进行分片这就会出现错误。 ②参数问题 参数问题的类型字段值为12它主要是因为对IP头部中的字段值出现了问题从而导致收到这些问题报文的主机返送一个参数问题的ICMP差错报文 ICMP控制报文 ①源站抑制 type4code0 源站抑制是拥塞控制的一种方式虽然TCP在端到端上使用了窗口机制和慢开始拥塞避免和快重传对流量进行了控制网关通过对链路上的链路情况进行监控对信源发送源站抑制里面包含着目的网络的信息当接收方接收该信息后根据目的网络信息知道去往该网络的链路发生拥塞于是减少信息的发送。 ②路由重定向 type5code0-3 路由重定向是指当主机发送给某个路由器的时候这个路由器会判断自己是否是最佳的转发设备如果根据它的路由信息发现其他的转发设备对于该主机来说最好也就是能够更快的将数转发到目的对象那么它就将发送路由重定向给这个主机让它将路由修改为更佳的路由。更佳路由的信息存储在ICMP的后4个字节上 ICMP查询报文 ①请求和回应报文 type8code0 需要注意的是请求和回应的ICMP报文使用到了ICMP头部的后4个字节分为两个字段即标识和序列号标识一般是发送该报文的进程号标识和序列号是标识一对请求和回应报文只有与某请求报文对应的回应报文它们的标识与序列号才是相同的。 需要注意的是请求和回应的ICMP数据包中的数据部分都是相同的。 ②路由询问或通告 路由询问的类型字段值为10通告的类型字段值为9只有一个代码0 该类型报文主要用于无盘工作站没有办法保存网关的情况它就只能靠发送路由询问来询问网关信息。路由询问报文只用了ICMP头部的前面4个字节但是路由通告使用了全部的8个字节。、后4个字节有三个字段分别为“地址数地址项长度生存时间”它们占用的长度是1B1B2B这三个字段记载着数据部分包含的路由条目数量路由条目的长度即IP地址的长度以及路由条目在路由器上面的有效生存时间。 在该ICMP报文中每个路由信息分为路由地址和优先级各自占用4个字节优先级越高越有可能成为该主机的默认网关。 ③时间戳请求与应答 时间戳的请求的类型字段为13应答为14只有一个代码0 它的头部与请求与回应的ICMP报文一致但是数据部分它使用了12个字节每4个字节记录一段时间信息总共有三段分别是“发送时间戳 接收时间戳回送时间戳”发送时间戳的信息由时间戳请求者记录后面两个字段由回送者记录。字段里面记录的是有关当前时间的毫秒数的表示发送者只要根据回送者发送的时间信息就可以很容易的求出往返时长。 ④地址掩码请求和应答 请求的类型字段值为17应答的类型字段为18只有一个代码0 它的ICMP头部与请求的ICMP包的头部相同数据字段存储的是请求的子网掩码 PS Identifier标识符Identifier 是一个16位的字段通常用于标识 ICMP Echo 请求和响应之间的匹配。当发送 ICMP Echo 请求时Identifier 字段的值会被设置为一个特定的标识符通常是随机生成的然后在接收到 ICMP Echo 响应时接收端会将相同的标识符字段包含在响应中以便发送端能够识别与响应相关联的请求。 Sequence Number序列号Sequence Number 是一个16位的字段它通常用于按顺序对 ICMP Echo 请求和响应进行排序。每个 ICMP Echo 请求都会包含一个唯一的序列号然后在接收到 ICMP Echo 响应时接收端会将相同的序列号字段包含在响应中以便发送端能够识别响应与哪个请求相对应。 这两个字段的组合标识符和序列号允许发送端将 ICMP Echo 请求与响应正确匹配从而可以测量网络的延迟和连通性。当发送多个 ICMP Echo 请求时这些字段的组合确保了每个响应都与特定的请求关联并且可以按顺序排列。 需要注意的是Identifier 和 Sequence Number 的确切含义可能因 ICMP 报文的类型和用途而有所不同。上述解释是针对 ICMP Echo 请求和响应的常见用法。其他类型的 ICMP 报文可能会使用这些字段以不同的方式 2.4 实际报文举例 1、请求响应 请求包 响应包 2、网络、主机、协议、端口不可达 三、使用go实现icmp请求以及接收响应内容 package mainimport (bytescontainer/listencoding/binaryflagfmtlognetostime )type ICMP struct {Type uint8Code uint8Checksum uint16Identifier uint16SequenceNum uint16 }var (timeout int64size intcount inttyp uint8 8code uint8 0data string )func main() {//获取命令输入内容getCommandArgs()if len(os.Args) 2 {log.Fatal(Usage: programname target_ip)}raddr, _ : net.ResolveIPAddr(ip, os.Args[len(os.Args)-1])desIP : raddr.String()//建立连接以及最后释放连接conn, err : net.DialTimeout(ip:icmp, desIP, time.Duration(timeout)*time.Millisecond)if err ! nil {log.Fatal(err)}defer conn.Close()//发送报文展示格式// statistic : list.New()icmp : *ICMP{Type: typ,Code: code,Checksum: 0,Identifier: 0,SequenceNum: 0,}icmpdata : []byte(data)recv : make([]byte, 1024)statistic : list.New()sended_packets : 0var buffer bytes.Bufferbinary.Write(buffer, binary.BigEndian, icmp)buffer.Write(icmpdata)icmp.Checksum CheckSum(buffer.Bytes())buffer.Reset()binary.Write(buffer, binary.BigEndian, icmp)buffer.Write(icmpdata)fmt.Printf(正在Ping %s [%s] 具有 %d 字节的数据:\n, raddr, conn.RemoteAddr(), len(data))for i : 0; i count; i {t_start : time.Now()_, err : conn.Write(buffer.Bytes())if err ! nil {log.Fatalln(err)continue}sended_packetsconn.SetReadDeadline((time.Now().Add(time.Second * time.Duration(timeout))))_, err conn.Read(recv)if err ! nil {fmt.Println(请求超时)continue}t_end : time.Now()dur : t_end.Sub(t_start).Nanoseconds() / 1e6 //计算请求时间// fmt.Printf(来自 %s 的回复 字节 %s 时间 %dms\n, desIP, len(data), dur)fmt.Printf(来自 %s 的回复 字节 %d 时间 %dms TTL %d\n, conn.RemoteAddr(), len(data), dur, recv[8])statistic.PushBack(dur)defer buffer.Reset()}//最后统计请求包defer func() {fmt.Println()var min, max, sum int64if statistic.Len() 0 {min, max, sum 0, 0, 0} else {min, max, sum statistic.Front().Value.(int64), statistic.Front().Value.(int64), int64(0)}for v : statistic.Front(); v ! nil; v v.Next() {val : v.Value.(int64)switch {case val min:min valcase val max:max val}sum sum val}recved, losted : statistic.Len(), sended_packets-statistic.Len()fmt.Printf( %s 的Ping统计信息\n 数据包: 已发送 %d, 已接收 %d, 丢失 %d (%.1f%% 丢失),\n往返行程的估计时间以毫秒为单位:\n 最短 %dms, 最长 %dms, 平均 %.0fms\n,desIP,sended_packets, recved, losted, float32(losted)/float32(sended_packets)*100,min, max, float32(sum)/float32(recved),)}()}func getCommandArgs() {flag.Int64Var(timeout, w, 5, 请求超时时长 单位秒)flag.StringVar(data, d, this is icmp databody, 请求的数据内容)flag.IntVar(count, n, 4, 发送请求数)flag.Parse() }func CheckSum(data []byte) uint16 {length : len(data)index : 0var sum uint32 0for length 1 {sum uint32(data[index])8 uint32(data[index1])length - 2index 2}if length ! 0 {sum uint32(data[index])}hi16 : sum 16for hi16 ! 0 {sum hi16 uint32(uint16(sum))hi16 sum 16}return uint16(^sum)}使用
http://www.pierceye.com/news/781392/

相关文章:

  • 思明区建设局网站微信 网页版
  • 淘宝客怎么做自己的网站搜索引擎营销案例分析题
  • 给女朋友做网站的素材友情链接是什么意思
  • 成都微信网站建设多少钱南平抖音搜索排名seo软件
  • 做外贸用哪些网站成都房地产开发商排名
  • 网站建设实施计划包括网页关键词优化
  • 建企业网站怎么做单页面网站源码
  • 儿童网站模板微信网站下载
  • 建设网站的市场背景搭建本地网站做色流
  • 湖南岳阳网站建设公司黄页顺企网宾馆在什么网站做推广效果好
  • 做外贸网站 怎么收钱网站自适应手机怎么
  • wordpress分只显示标题网站内容优化关键词布局
  • 校园云网站建设怎么做网站自动响应
  • 怎么做扫码进入网站北京seo计费
  • 网站备案 2016如何找网站
  • 网站开发客户挖掘做网站没签合同
  • 适合大学生做的兼职网站中国企业网信息查询系统
  • 淘宝网站的建设与运营设计思路做网站商铺模板
  • 网站优秀设计方案中国网站制作企业排行榜
  • 南昌建设局网站查询塔吊证怎么查福州seo网站建设
  • 机关内网站建设方案书给人做传销网站
  • 厦门有什么网站制作公司邢台太行中学简介
  • 天合建设集团网站做一个网站得做多少个页面
  • 做衣服接订单的网站网站用哪些系统做的
  • 爱美刻在线制作网站罗村网站制作公司
  • 现在网站用什么软件做免费的会计做账系统
  • 国外的包装设计网站三明网站设计
  • 网站源码怎样弄成网站工商登记网站
  • 2016做砸了的小网站一键创建网站
  • 怎么制作网站域名六安网站制作人才招聘