はじめに
GO言語で開発するプログラムの中でpingを実行して疎通確認をしたい場合があると思います。そのためのパッケージの紹介です。
を使います。go-pingというパッケージがありますが、今はメンテナンスされていません。検索して見つかっても使わないほうがよいです。
PINGを実行するプログラム
"www.google.com"へpingするプログラムは
package main
import (
"log"
probing "github.com/prometheus-community/pro-bing"
)
func main() {
pinger, err := probing.NewPinger("www.google.com")
if err != nil {
log.Fatalln(err)
}
pinger.Count = 3
// pinger.SetPrivileged(true) // for Windows
err = pinger.Run()
if err != nil {
log.Fatalln(err)
}
stats := pinger.Statistics()
log.Printf("stats=%+v", stats)
}
だけです。実行結果は、
$go run main.go
2024/09/19 05:29:58 stats=&{PacketsRecv:3 PacketsSent:3 PacketsRecvDuplicates:0 PacketLoss:0 IPAddr:142.250.198.4 Addr:www.google.com Rtts:[5.092ms 4.692ms 4.678ms] MinRtt:4.678ms MaxRtt:5.092ms AvgRtt:4.820667ms StdDevRtt:191.946µs}
注意事項
Windowsの場合
pinger.SetPrivileged(true)
をRunの前に追加してください。
Linuxで管理者権限なしの場合
$sudo sysctl -w net.ipv4.ping_group_range="0 2147483647"
を実行してください。
その他のOS毎の注意事項は、
を見てください。
余談
ネットワーク管理ソフトTWSNMPシリーズ
を開発するときにgo-snmpを使おうとしたのですが、あまりうまくいかなかったので自分でpingのパッケージを作りました。
TWSNMPシリーズ以外から利用することは試していないので、今回紹介したパッケージを使った方がよいと思います。