![見出し画像](https://assets.st-note.com/production/uploads/images/102225398/rectangle_large_type_2_3bfa8a826f3936b0d5978a09f70d546f.png?width=1200)
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を表示できるように改造すると
![](https://assets.st-note.com/img/1680732901910-LpigU5Inqc.png?width=1200)
表示できるようになりました。
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進数で表示されるはずです。
明日に続く
いいなと思ったら応援しよう!
![twsnmp](https://assets.st-note.com/production/uploads/images/14333815/profile_ee1accba5615957e5029db85d57fdb0a.jpg?width=600&crop=1:1,smart)