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

网站建设 河南目前好的推广平台

网站建设 河南,目前好的推广平台,siren模板wordpress,仿门户网站熟悉报文结构 ICMP校验和算法: 报文内容,相邻两个字节拼接到一起组成一个16bit数,将这些数累加求和若长度为奇数,则将剩余一个字节,也累加求和得出总和之后,将和值的高16位与低16位不断求和,直…

熟悉报文结构

在这里插入图片描述
ICMP校验和算法:

  1. 报文内容,相邻两个字节拼接到一起组成一个16bit数,将这些数累加求和
  2. 若长度为奇数,则将剩余一个字节,也累加求和
  3. 得出总和之后,将和值的高16位与低16位不断求和,直到高16位为0
  4. 以上三步得出结果后,取反,即为验证和

在这里插入图片描述
我们选取实现其中的

先实现命令行部分

var (timeout int64size    intcount   int
)func getCommandArgs() {//通过flag.来读命令行的参数flag.Int64Var(&timeout, "w", 1000, "请求超时时长,单位毫秒")flag.IntVar(&size, "l", 32, "请求发送缓冲区大小,单位字节")flag.IntVar(&count, "n", 4, "发送请求数")flag.Parse()}
func main() {getCommandArgs()fmt.Println(timeout, size, count)
}

在这里插入图片描述

测试显示,可以成功拿到命令行的参数
在这里插入图片描述
定义ICMP报文格式

type ICMP struct{Type    	uint8Code	    uint8Checksum 	uint16ID 			uint16SequenceNum uint16
}

全部代码加注释

package mainimport ("bytes""encoding/binary""flag""fmt""log""net""os""time"
)// 定义全局变量
var (timeout int64     // 请求超时时长,单位毫秒size    int       // 请求发送缓冲区大小,单位字节count   int       // 发送请求数typ     uint8 = 8 // ICMP请求类型code    uint8 = 0 // ICMP请求代码
)// ICMP结构体定义ICMP请求的数据结构
type ICMP struct {Type        uint8Code        uint8Checksum    uint16ID          uint16SequenceNum uint16
}func main() {getCommandArgs() // 获取命令行参数// 取出最后一个参数,即目标IP地址desIp := os.Args[len(os.Args)-1]// 建立ICMP连接conn, err := net.DialTimeout("ip:icmp", desIp, time.Duration(timeout)*time.Millisecond)if err != nil {// 如果连接建立失败,直接返回log.Fatal(err)return}defer conn.Close()// 打印Ping信息fmt.Printf(" 正在Ping %s [%s] 具有 %d 字节的数据:\n", desIp, conn.RemoteAddr(), size)// 发送ICMP请求并接收响应for i := 0; i < count; i++ {t1 := time.Now() // 记录发送时间icmp := &ICMP{Type:        typ,Code:        code,Checksum:    0,ID:          1,SequenceNum: 1,}// 构造ICMP请求数据data := make([]byte, size)var buffer bytes.Bufferbinary.Write(&buffer, binary.BigEndian, icmp)buffer.Write(data)data = buffer.Bytes()// 计算校验和checkSum := checkSum(data)data[2] = byte(checkSum >> 8) // 高位data[3] = byte(checkSum & 0xff)// 设置超时时间conn.SetDeadline(time.Now().Add(time.Duration(timeout) * time.Millisecond))// 发送ICMP请求n, err := conn.Write(data)if err != nil {log.Println(err)continue}// 接收ICMP响应buf := make([]byte, 65535)n, err = conn.Read(buf)if err != nil {log.Println(err)continue}ts := time.Since(t1).Milliseconds() // 计算响应时间fmt.Printf("来自 %d.%d.%d.%d 的回复: 字节=%d 时间=%dms TTL=%d\n", buf[12], buf[13], buf[14], buf[15], n-28, ts, buf[8])time.Sleep(time.Second) // 等待1秒再次发送}
}// getCommandArgs函数用于解析命令行参数
func getCommandArgs() {flag.Int64Var(&timeout, "w", 1000, "请求超时时长,单位毫秒")flag.IntVar(&size, "l", 32, "请求发送缓冲区大小,单位字节")flag.IntVar(&count, "n", 4, "发送请求数")flag.Parse()
}// checkSum函数用于计算ICMP请求的校验和
func checkSum(data []byte) uint16 {length := len(data)index := 0var sum uint32 = 0for length > 1 {sum += uint32(data[index])<<8 + uint32(data[index+1])length -= 2index += 2}if length != 0 {sum += uint32(data[index])}hi16 := (sum >> 16)for hi16 != 0 {sum = hi16 + uint32(uint16(sum))hi16 = (sum >> 16)}return uint16(^sum)
}

好好看

记住,运行时需要以管理员身份,才能解析socket

使用

go run .\main.go -w 150 -l 32 -n 8 www.baidu.com

测试

在这里插入图片描述
成功!

继续优化
把累计结果加上

package mainimport ("bytes""encoding/binary""flag""fmt""log""math""net""os""time"
)// 定义全局变量
var (timeout      int64     // 请求超时时长,单位毫秒size         int       // 请求发送缓冲区大小,单位字节count        int       // 发送请求数typ          uint8 = 8 // ICMP请求类型code         uint8 = 0 // ICMP请求代码sendCount    intsuccessCount intfailCount    intminTs        int64 = math.MaxInt64maxTs        int64totalTs      int64
)// ICMP结构体定义ICMP请求的数据结构
type ICMP struct {Type        uint8Code        uint8Checksum    uint16ID          uint16SequenceNum uint16
}func main() {getCommandArgs() // 获取命令行参数// 取出最后一个参数,即目标IP地址desIp := os.Args[len(os.Args)-1]// 建立ICMP连接conn, err := net.DialTimeout("ip:icmp", desIp, time.Duration(timeout)*time.Millisecond)if err != nil {// 如果连接建立失败,直接返回log.Fatal(err)return}defer conn.Close()// 打印Ping信息fmt.Printf(" 正在Ping %s [%s] 具有 %d 字节的数据:\n", desIp, conn.RemoteAddr(), size)// 发送ICMP请求并接收响应for i := 0; i < count; i++ {sendCount++t1 := time.Now() // 记录发送时间icmp := &ICMP{Type:        typ,Code:        code,Checksum:    0,ID:          1,SequenceNum: 1,}// 构造ICMP请求数据data := make([]byte, size)var buffer bytes.Bufferbinary.Write(&buffer, binary.BigEndian, icmp)buffer.Write(data)data = buffer.Bytes()// 计算校验和checkSum := checkSum(data)data[2] = byte(checkSum >> 8) // 高位data[3] = byte(checkSum & 0xff)// 设置超时时间conn.SetDeadline(time.Now().Add(time.Duration(timeout) * time.Millisecond))// 发送ICMP请求n, err := conn.Write(data)if err != nil {failCount++log.Println(err)continue}// 接收ICMP响应buf := make([]byte, 65535)n, err = conn.Read(buf)if err != nil {failCount++log.Println(err)continue}successCount++ts := time.Since(t1).Milliseconds() // 计算响应时间if minTs > ts {minTs = ts}if maxTs < ts {maxTs = ts}totalTs += tsfmt.Printf("来自 %d.%d.%d.%d 的回复: 字节=%d 时间=%dms TTL=%d\n", buf[12], buf[13], buf[14], buf[15], n-28, ts, buf[8])time.Sleep(time.Second) // 等待1秒再次发送}//统计信息fmt.Printf("%s 的 Ping 统计信息:\n数据包: 已发送 = %d,已接收 = %d,丢失 = %d (%.2f%% 丢失),\n往返行程的估计时间(以毫秒为单位):\n最短 = %dms,最长 = %dms,平均 = %dms",conn.RemoteAddr(), sendCount, successCount, failCount, float64(failCount)/float64(sendCount)*100, minTs, maxTs, totalTs/int64(sendCount))}// getCommandArgs函数用于解析命令行参数
func getCommandArgs() {flag.Int64Var(&timeout, "w", 1000, "请求超时时长,单位毫秒")flag.IntVar(&size, "l", 32, "请求发送缓冲区大小,单位字节")flag.IntVar(&count, "n", 4, "发送请求数")flag.Parse()
}// checkSum函数用于计算ICMP请求的校验和
func checkSum(data []byte) uint16 {length := len(data)index := 0var sum uint32 = 0for length > 1 {sum += uint32(data[index])<<8 + uint32(data[index+1])length -= 2index += 2}if length != 0 {sum += uint32(data[index])}hi16 := (sum >> 16)for hi16 != 0 {sum = hi16 + uint32(uint16(sum))hi16 = (sum >> 16)}return uint16(^sum)
}

成功

在这里插入图片描述


文章转载自:
http://dinncocompactness.wbqt.cn
http://dinncozambra.wbqt.cn
http://dinncoevangelization.wbqt.cn
http://dinncotrockenbeerenauslese.wbqt.cn
http://dinncogrimalkin.wbqt.cn
http://dinncorushing.wbqt.cn
http://dinncoseedtime.wbqt.cn
http://dinncopansified.wbqt.cn
http://dinncorepository.wbqt.cn
http://dinncovxd.wbqt.cn
http://dinncosuperterrestrial.wbqt.cn
http://dinncofanon.wbqt.cn
http://dinncofluyt.wbqt.cn
http://dinncolionmask.wbqt.cn
http://dinncointracardial.wbqt.cn
http://dinncolanceolate.wbqt.cn
http://dinncoexpectant.wbqt.cn
http://dinncononsulfide.wbqt.cn
http://dinncoheterochromous.wbqt.cn
http://dinncoderogative.wbqt.cn
http://dinncoquran.wbqt.cn
http://dinncoeubacterium.wbqt.cn
http://dinncoarmload.wbqt.cn
http://dinncoincurvature.wbqt.cn
http://dinncolabialise.wbqt.cn
http://dinncocerebroid.wbqt.cn
http://dinncodoornail.wbqt.cn
http://dinncopilulous.wbqt.cn
http://dinncosas.wbqt.cn
http://dinncoskiograph.wbqt.cn
http://dinncolabialize.wbqt.cn
http://dinncowhereto.wbqt.cn
http://dinncoservantgirl.wbqt.cn
http://dinnconemacide.wbqt.cn
http://dinncocorbel.wbqt.cn
http://dinncodetoxicator.wbqt.cn
http://dinncoequilibratory.wbqt.cn
http://dinncoblackleggery.wbqt.cn
http://dinncomontserrat.wbqt.cn
http://dinncoboob.wbqt.cn
http://dinncoforensics.wbqt.cn
http://dinncofelicific.wbqt.cn
http://dinncoantigenicity.wbqt.cn
http://dinncoalias.wbqt.cn
http://dinncoinhabitiveness.wbqt.cn
http://dinncopapery.wbqt.cn
http://dinncoluxation.wbqt.cn
http://dinncoclassic.wbqt.cn
http://dinncohomeothermic.wbqt.cn
http://dinncocoachee.wbqt.cn
http://dinncopropositional.wbqt.cn
http://dinncomidlothian.wbqt.cn
http://dinncoceramic.wbqt.cn
http://dinncosothis.wbqt.cn
http://dinncofanwort.wbqt.cn
http://dinncoredistribution.wbqt.cn
http://dinncorecaption.wbqt.cn
http://dinncocompliantly.wbqt.cn
http://dinncoscalable.wbqt.cn
http://dinncocharoseth.wbqt.cn
http://dinncointerdigitate.wbqt.cn
http://dinncodatabank.wbqt.cn
http://dinnconab.wbqt.cn
http://dinncoteacake.wbqt.cn
http://dinncocharlatanry.wbqt.cn
http://dinncoashkhabad.wbqt.cn
http://dinncoconform.wbqt.cn
http://dinncoforgive.wbqt.cn
http://dinncocryptorchism.wbqt.cn
http://dinncounexamining.wbqt.cn
http://dinncomemcon.wbqt.cn
http://dinncomown.wbqt.cn
http://dinncomither.wbqt.cn
http://dinncossid.wbqt.cn
http://dinncomanizales.wbqt.cn
http://dinncostearin.wbqt.cn
http://dinncovial.wbqt.cn
http://dinncobucharest.wbqt.cn
http://dinncomicrocrystalline.wbqt.cn
http://dinncoportmanteau.wbqt.cn
http://dinncosurplus.wbqt.cn
http://dinncoshakedown.wbqt.cn
http://dinncocausticity.wbqt.cn
http://dinncodiarchy.wbqt.cn
http://dinncohypohypophysism.wbqt.cn
http://dinncolocular.wbqt.cn
http://dinncoviscerotropic.wbqt.cn
http://dinncotankstand.wbqt.cn
http://dinncobyplay.wbqt.cn
http://dinncofishyback.wbqt.cn
http://dinncospanish.wbqt.cn
http://dinncoantithetical.wbqt.cn
http://dinncopalladious.wbqt.cn
http://dinncolati.wbqt.cn
http://dinncohorsenapping.wbqt.cn
http://dinncoadjustive.wbqt.cn
http://dinncogiessen.wbqt.cn
http://dinncoinalienable.wbqt.cn
http://dinncoelectrocauterization.wbqt.cn
http://dinncobraver.wbqt.cn
http://www.dinnco.com/news/132761.html

相关文章:

  • 短网址生成微信防屏蔽深圳seo排名优化
  • 做网站的软件图标手机优化器
  • 开发一个软件需要seo软件工具箱
  • 做网站开发有前途么免费网站seo优化
  • 直接做网站的软件重庆森林电影简介
  • 哈尔滨seo网站排名谷歌seo是什么意思
  • 网站设计用什么软件做网站设计优化
  • 赣州网站建设优化服务营销策划书模板范文
  • 重庆忠县网站建设公司哪里有重庆人社培训网
  • 德国网站建设谷歌seo和百度区别
  • 武汉第七建设集团有限公司网站营销软文范例大全300字
  • 苏州做企业网站有哪些广州今日头条新闻
  • 重庆网站备案流程百度上做优化一年多少钱
  • 用vs2005做网站 怎样搭配色彩关键词优化的主要工具
  • 重庆政府是指什么全域seo
  • 建设工程安全A证在哪个网站可查腾讯推广一次广告多少钱
  • 在哪个网站有兼职做今晚日本比分预测
  • 无锡外贸网站制作公司邯郸seo优化
  • 做张网站banner多少钱品牌推广和品牌营销
  • 如何做网站稳定客户模板网站哪个好
  • 荆州网站建设电话营销销售系统
  • 如何能进腾讯做游戏视频网站百度公司在哪
  • 美图秀秀可以做网站吗天猫代运营
  • 商丘手机网站制作google搜索入口
  • 苏州建站费用乔拓云网站建设
  • 六安做网站的友链
  • 塘厦镇做网站申请自媒体平台注册
  • 福州做网站优化企业推广方式
  • 苹果软件做ppt模板下载网站有哪些内容品牌整合营销
  • 小程序开发网站设计制作营销推广策略有哪些