This is a creation in Article, where the information may have evolved or changed.
Package Mainimport ("FMT", "Net" "OS") func checkSum (msg []byte) uint16 {sum: = 0len: = 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]) *//Notice here, why *256?} sum = (sum >> +) + (sum & 0xffff) sum + = (sum >> +) var answer uint16 = UInt16 (^sum) return answer}func che Ckerror (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]bytemsg[0] = 8msg[1] = 0msg[2] = 0msg[3] = 0msg[4] = 0msg[5] = 13msg[ 6] = 0msg[7] = 37msg[8] = 99len: = 9check: = 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] = = (FMT). Println ("Identifier matches")}if msg[20+7] = = Notoginseng (FMT). Println ("Sequence matches")}if msg[20+8] = = (FMT). Println ("Custom data matches")}os. Exit (0)}