大佬教程收集整理的这篇文章主要介绍了golang实现icmp中的ping功能,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
package main import ( "fmt" "net" "os" ) func checkSum(msg []bytE) uint16 { sum := 0 len := len(msg) for i := 0; i < len-1; i += 2 { sum += int(msg[i])*256 + int(msg[i+1]) } if len%2 == 1 { sum += int(msg[len-1]) * 256 // notice here,why *256? } sum = (sum >> 16) + (sum & 0xffff) sum += (sum >> 16) var answer uint16 = uint16(^sum) return answer } func checkError(err error) { if err != nil { fmt.Fprint(os.Stderr,"Fatal error:",err.Error()) os.Exit(1) } } func main() { if len(os.Args) != 2 { fmt.Println("Usage: ",os.Args[0],"host") os.Exit(1) } service := os.Args[1] conn,err := net.Dial("ip4:icmp",servicE) checkError(err) var msg [512]byte msg[0] = 8 msg[1] = 0 msg[2] = 0 msg[3] = 0 msg[4] = 0 msg[5] = 13 msg[6] = 0 msg[7] = 37 msg[8] = 99 len := 9 check := checkSum(msg[0:len]) msg[2] = byte(check >> 8) msg[3] = byte(check & 0xff) fmt.Println(msg[0:len]) _,err = conn.Write(msg[0:len]) checkError(err) _,err = conn.Read(msg[0:]) checkError(err) fmt.Println(msg[0 : 20+len]) fmt.Println("Got response") if msg[20+5] == 13 { fmt.Println("Identifier matches") } if msg[20+7] == 37 { fmt.Println("Sequence matches") } if msg[20+8] == 99 { fmt.Println("Custom data matches") } os.Exit(0) }
以上是大佬教程为你收集整理的golang实现icmp中的ping功能全部内容,希望文章能够帮你解决golang实现icmp中的ping功能所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。