1
0

GO言語でpingを実行するプログラムの作り方

Posted at

はじめに

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シリーズ以外から利用することは試していないので、今回紹介したパッケージを使った方がよいと思います。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0