wrap7/tools.go

33 lines
1.2 KiB
Go

// 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
}