1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Go言語のSNMPパッケージgosnmpのサンプルプログラムを試す方法

Posted at

はじめに

SNMPに関連したプログラムは、ほとんどの場合NET-SNMPを利用して開発していると思います。C言語の他に、PerlやPyhtonからも利用できますが、Go言語からは簡単に利用できません。

そこで、今回はピュアGoで書かれたSNMPクライアントライブラリgosnmp

を紹介します。基本のサンプルプログラムを試す方法の説明です。

準備

mkdir snnmp_get
cd snmp_get
go mod init snmp_get
go get github.com/gosnmp/gosnmp

で準備完了

サンプルログラム

GitHubのサイトにあるサンプルプログラムは、


package main

import (
	"fmt"
	"log"

	g "github.com/gosnmp/gosnmp"
)

func main() {
	// Default is a pointer to a GoSNMP struct that contains sensible defaults
	// eg port 161, community public, etc
	g.Default.Target = "192.168.1.210"
    // g.Default.Community = "public"
	// g.Default.Port = 161
	err := g.Default.Connect()
	if err != nil {
		log.Fatalf("Connect() err: %v", err)
	}
	defer g.Default.Conn.Close()

	oids := []string{"1.3.6.1.2.1.1.4.0", "1.3.6.1.2.1.1.7.0"}
	result, err2 := g.Default.Get(oids) // Get() accepts up to g.MAX_OIDS
	if err2 != nil {
		log.Fatalf("Get() err: %v", err2)
	}

	for i, variable := range result.Variables {
		fmt.Printf("%d: oid: %s ", i, variable.Name)

		// the Value of each variable returned by Get() implements
		// interface{}. You could do a type switch...
		switch variable.Type {
		case g.OctetString:
			bytes := variable.Value.([]byte)
			fmt.Printf("string: %s\n", string(bytes))
		default:
			// ... or often you're just interested in numeric values.
			// ToBigInt() will return the Value as a BigInt, for plugging
			// into your calculations.
			fmt.Printf("number: %d\n", g.ToBigInt(variable.Value))
		}
	}
}

です。

SNMPエージェントのアドレス

g.Default.Target = "192.168.1.210"

の部分です。ご自身の環境に合わせて変更してください。

Communityとポート番号

デフォルトは、"public"と161です。

    // g.Default.Community = "public"
	// g.Default.Port = 161

のコメントを外して、ご自身の環境の合わせて変更してください。

取得するMIBのOID

取得するMIBは、文字列のOIDで指定します。

oids := []string{"1.3.6.1.2.1.1.4.0", "1.3.6.1.2.1.1.7.0"}

結果の表示

エラーがなければ、
result.Variablesに結果のスライスが入っています。
MIBのOIDは、variable.Nameに文字列型で入っています。
取得した値は、variable.Valueですが、interface{}型なので、variable.Typeで種類を判断して、値を変換して表示します。

実行結果

サンプルプログラムを実行すると

$go run main.go
0: oid: .1.3.6.1.2.1.1.4.0 string: twsnmp@gmail.com
1: oid: .1.3.6.1.2.1.1.7.0 number: 72

のように表示されます。メールアドレスなどの値は対象のSNMPエージェント毎に違います。

余談

このgosnmpパッケージを使って、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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?