Something went wrong. Try again.
forked from tailscale/tailscale
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839// Copyright (c) Tailscale Inc & contributors// SPDX-License-Identifier: BSD-3-Clause
//go:build darwin || ios
package netstack
import ( "net/netip" "time"
probing "github.com/prometheus-community/pro-bing")
// sendOutboundUserPing sends a non-privileged ICMP (or ICMPv6) ping to dstIP with the given timeout.func (ns *Impl) sendOutboundUserPing(dstIP netip.Addr, timeout time.Duration) error { p, err := probing.NewPinger(dstIP.String()) if err != nil { ns.logf("sendICMPPingToIP failed to create pinger: %v", err) return err }
p.Timeout = timeout p.Count = 1 p.SetPrivileged(false)
p.OnSend = func(pkt *probing.Packet) { ns.logf("sendICMPPingToIP: forwarding ping to %s:", p.Addr()) } p.OnRecv = func(pkt *probing.Packet) { ns.logf("sendICMPPingToIP: %d bytes pong from %s: icmp_seq=%d time=%v", pkt.Nbytes, pkt.IPAddr, pkt.Seq, pkt.Rtt) } p.OnFinish = func(stats *probing.Statistics) { ns.logf("sendICMPPingToIP: done, %d replies received", stats.PacketsRecv) }
return p.Run()}