in client.go [841:879]
func icmpSendMsg(c net.PacketConn, dstIPAddr net.IPAddr, hop, seq int, body string, timeout time.Duration) (time.Time, []byte, error) {
start := time.Now()
err := icmpSetTTL(c, hop+1)
if err != nil {
ui.printErr("Failed to set TTL. Error: %v", err)
return start, nil, err
}
icmpSetTOS(c, int(gTOS))
err = c.SetDeadline(time.Now().Add(timeout))
if err != nil {
ui.printErr("Failed to set Deadline. Error: %v", err)
return start, nil, err
}
pid := os.Getpid() & 0xffff
pid = 9999
wm := icmp.Message{
Type: ipv4.ICMPTypeEcho, Code: 0,
Body: &icmp.Echo{
ID: pid, Seq: hop<<8 | seq,
Data: []byte(body),
},
}
if gIPVersion == ethrIPv6 {
wm.Type = ipv6.ICMPTypeEchoRequest
}
wb, err := wm.Marshal(nil)
if err != nil {
ui.printErr("Failed to Marshal data. Error: %v", err)
return start, nil, err
}
start = time.Now()
if _, err := c.WriteTo(wb, &dstIPAddr); err != nil {
ui.printErr("Failed to send ICMP data. Error: %v", err)
return start, nil, err
}
return start, wb, nil
}