見出し画像

TWSNMP FCフィードバック回答:SNMP TRAPの文字化け その4

浦和レッズ 引き分け!
昨日もフィードバックの返信を頂きました。ありがとうございます。

ご確認ありがとうございます。
MIBファイルから該当部分の抜粋と
TWSNMPv4のMIBツリーで参照した結果を
下記に張り付けさせていただきました。
ご確認をよろしくお願いいたします。

・MIBファイルから抜粋
SYNTAX DateAndTime

・TWSNMPv4 MIBツリーで参照した結果
SYNTAX OCTET STRING (8 | 11)
DISPLAY-HINT "2d-1d-1d,1d:1d:1d.1d,1a1d:1d"

一部省略していますが、

に書いたDateAndTimeと同じフォーマットのようです。

先にテストプログラムを改造して、DateAndTimeのMIB値を含むTRAPを送ってみました。送っていただいたログと同じように文字化けしました。
DateAndTimeを表示できるように改造すると

表示できるようになりました。
DateAndTimeの仕様を良く読むと8バイトの時と11バイトの時がある事に気づきました。念の為DISPLAY-HINTに従って表示する処理を真面目に対応しました。

// DISPLAY-HINT "2d-1d-1d,1d:1d:1d.1d,1a1d:1d"
func getDateAndTime(i interface{}) string {
	switch v := i.(type) {
	case string:
		return v
	case []uint8:
		if len(v) == 11 {
			return fmt.Sprintf("%04d/%02d/%02d %02d:%02d:%02d.%02d%c%02d%02d",
				(int(v[0])*256 + int(v[1])), v[2], v[3], v[4], v[5], v[6], v[7], v[8], v[9], v[10])
		} else if len(v) == 8 {
			return fmt.Sprintf("%04d/%02d/%02d %02d:%02d:%02d.%02d",
				(int(v[0])*256 + int(v[1])), v[2], v[3], v[4], v[5], v[6], v[7])
		}
	case int, int64, uint, uint64:
		return fmt.Sprintf("%d", v)
	}
	return fmt.Sprintf("Invalid Date And Time %v", i)
}

これで、受信したTRAPの含まれるMIB値が DateAndTime型と認識されれば、文字化けしないと思います。
DateAndTime型と認識されなくても16進数で表示されるはずです。


明日に続く

開発のための諸経費(機材、Appleの開発者、サーバー運用)に利用します。 ソフトウェアのマニュアルをnoteの記事で提供しています。 サポートによりnoteの運営にも貢献できるのでよろしくお願います。