// wrap7 project wrap7.go package wrap7 import ( "net" "time" "github.com/go-ping/ping" ) const ( PINGER_COUNT = 10 // Die Anzahl an Pings, die der Pinger zur Auswertung heranzieht. Pinger-Counts kosten richtig viel Zeit. Leider ist ein Ping alleine viel zu ungenau. PINGER_TIMEOUT = "1000ms" // Sobald der Pinger innerhalb dieser Zeitspanne keinen Erfolg hat, liefert er 0ms Pingzeit und 100% Paketloss zur?ck. PINGER_CRITICAL_LOSS_PERCENT = 100 ) func pingMyDing(myIp net.IP) (time.Duration, float64) { //Die Konversion zu net.Ip ist eigentlich überflüssig, die Limitierung des Typs an der Schnittstelle erspart aber nachgelagerte Plausibilitätsprüfungen. pinger, err := ping.NewPinger(myIp.String()) if err != nil { panic(err) } pinger.Count = PINGER_COUNT pinger.Timeout, _ = time.ParseDuration(PINGER_TIMEOUT) //pinger.Interval, _ = time.ParseDuration(PINGER_INTERVAL) //sudo sysctl -w net.ipv4.ping_group_range="0 2147483647" pinger.SetPrivileged(false) pinger.Run() // blocks until finished stats := pinger.Statistics() // get send/receive/rtt stats return stats.AvgRtt, stats.PacketLoss }