33 lines
1.2 KiB
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
|
|
}
|