关闭

SnmpSharpNet OctetString DateAndTime自定义解析

845人阅读 评论(0) 收藏 举报
分类:

在进行有关Snmpsharpnet的变成时遇到一个问题,当OctetString向时间转换时产生的是乱码。是因为snmpsharpnet并没有定义OctetString向datetime转换的函数。经过笔者的学习与实践找到了解决的办法。接下来以获得计算机上已安装程序的安装时间为例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using SnmpSharpNet;//需要添加引用
namespace 时间乱码问题
{
    class Program
    {
        static void Main(string[] args)
        {
            SimpleSnmp snmp = new SimpleSnmp("127.0.0.1", "public");

            if (!snmp.Valid)
            {

                return;
            }
            Dictionary<Oid, AsnType> result = snmp.Walk(SnmpVersion.Ver2, ".1.3.6.1.2.1.25.6.3.1.5");//程序安装时间
            
            if (result == null)
            {

                return;
            }

            foreach (KeyValuePair<Oid, AsnType> kvp in result)
            {
                //Console.WriteLine(kvp.Value.ToString());      //如果是执行这一句就会发现是乱码结果
                Console.WriteLine(parseDateAndTimeOctet((OctetString)kvp.Value));                
            }
        }
        public static String parseDateAndTimeOctet( OctetString v )
        {


            
            //OctetString
           
            byte[] bts = v.ToArray();
            
            byte[] format_str = new byte[128];   //保存格式化过后的时间字符串

            int year;

            int month;

            int day;

            int hour;

            int minute;

            int second;

            //int msecond;      
            year =year = bts[0] * 256  + bts[1];
            month = bts[2];
            day = bts[3];
            hour = bts[4];
            minute = bts[5];
            second = bts[6];
            //msecond = bts[7];
            //以下为格式化字符串
            int index = 3;
            int temp = year;

            for (; index >= 0; index--)
            {
                format_str[index] = (byte)(48 + (temp - temp / 10 * 10));
                temp /= 10;
            }

            format_str[4] = (Byte)'-';
            index = 6;
            temp = month;
            for (; index >= 5; index--)
            {
                format_str[index] = (byte)(48 + (temp - temp / 10 * 10));
                temp /= 10;
            }

            format_str[7] = (Byte)'-';
            index = 9;
            temp = day;
            for (; index >= 8; index--)
            {

                format_str[index] = (byte)(48 + (temp - temp / 10 * 10));

                temp /= 10;

            }
            format_str[10] = (Byte)' ';
            index = 12;
            temp = hour;
            for (; index >= 11; index--)
            {
                format_str[index] = (byte)(48 + (temp - temp / 10 * 10));
                temp /= 10;
            }

            format_str[13] = (Byte)':';
            index = 15;
            temp = minute;
            for (; index >= 14; index--)
            {

                format_str[index] = (byte)(48 + (temp - temp / 10 * 10));

                temp /= 10;

            }

            format_str[16] = (Byte)':';
            index = 18;
            temp = second;
            for (; index >= 17; index--)
            {
                format_str[index] = (byte)(48 + (temp - temp / 10 * 10));

                temp /= 10;

            }

            //int i = 6;
            //while (i >= 0)
            //{
            //    Console.WriteLine("{0}", bts[i]);
            //    i--;
            //}

            return System.Text.Encoding.Default.GetString(format_str);// new String(format_str);

        }
    }
}


1
0
查看评论

使用snmptrap发送trap时OCTET STRING类型节点的值处理

SMI信息管理结构中定义了12种数据类型,一般MIB中常见的有INTERGER、DisplayString、OCTET STRING、OBJECT IDENTIFIER等几种。其中OCTET STRING为0或多个8 bit字节,每个字节值在0~255之间;DisplayString为0或多个8b...
  • wuchuan53
  • wuchuan53
  • 2014-02-21 10:19
  • 2576

X680 23 Octetstring类型标识

23 Octetstring类型标识        23.1 octetstring类型应使用OctetStringType标识引用。        OctetStringTy...
  • fangwm2011
  • fangwm2011
  • 2011-09-13 17:09
  • 1762

ASN.1笔记——基本类型详述

<!-- p {margin-bottom:0.21cm} --> ASN.1笔记——2 一.ASN.1基本类型 基本类型汇总表 类型 UNIVERSALTag 取值 BOOLEAN...
  • sever2012
  • sever2012
  • 2012-06-18 16:48
  • 10133

在Snmp++中处理DateAndTime类型数据 选择自 makeitandy 的 Blog

 DateAndTime是Snmpv2中的一种数据类型,它主要提供了对日期时间的描述。我在使用Snmp++开发包时,发现其不提供对DateAndTime类型的支持,而有时又需要用到该类型,于是,自己写了一个DateTime类扩展Snmp++。通过该类可以实现对DateAndTime类型的格...
  • byAlC
  • byAlC
  • 2005-09-22 10:07
  • 2445

在Snmp++中处理DateAndTime类型数据

DateAndTime是Snmpv2中的一种数据类型,它主要提供了对日期时间的描述。我在使用Snmp++开发包时,发现其不提供对DateAndTime类型的支持,而有时又需要用到该类型,于是,自己写了一个DateTime类扩展Snmp++。通过该类可以实现对DateAndTime类型的格式化,并且可...
  • makeitandy
  • makeitandy
  • 2004-10-21 10:46
  • 1727

byte 和 octet有什么区别?

最近项目中写文档,由于跟老外合作,所有都是英文的。经常遇到octet这个词,我只是知道byte是一个由8 bits构成的字节,那么octet是什么呢?原来,不同计算机中字节的长度不同,为了不引起歧义,用octet专指8 bits构成的字节。
  • shiwo45zy
  • shiwo45zy
  • 2012-01-09 21:34
  • 9644

Snmp乱码问题

1.前言:在开发Snmp协议传输数据的时候,发现中文会乱码,网上找的解决方案基本都是说,因为源码的问题,要改动源码,但是感觉改动源码太难了,很多内部调用并不是所有人都能搞得定的。 2.乱码原因以下是乱码的源头,因为默认超过128的位数的字节,都按16进制处理public class OctetStr...
  • xiekuntarena
  • xiekuntarena
  • 2017-03-23 18:41
  • 789

octet string

octet   string是字节串,即用十六进制串表示字节序列。如真正的字节序列是   1   2   3   4,用字节串则表示为31   32   33&...
  • livingpark
  • livingpark
  • 2011-10-21 17:17
  • 726

SnmpSharpNet OctetString DateAndTime自定义解析

在进行有关Snmpsharpnet的变成时遇到一个问题,当OctetString向时间转换时产生的是乱码。是因为snmpsharpnet并没有定义OctetString向datetime转换的函数。经过笔者的学习与实践找到了解决的办法。接下来以获得计算机上已安装程序的安装时间为例: using S...
  • u010730731
  • u010730731
  • 2016-06-01 09:25
  • 845

基于C#的SNMP编程(使用SnmpSharpNet)

基于C#的SNMP编程(使用SnmpSharpNet)
  • irencewh
  • irencewh
  • 2014-04-28 10:13
  • 3220
    个人资料
    • 访问:8520次
    • 积分:199
    • 等级:
    • 排名:千里之外
    • 原创:10篇
    • 转载:0篇
    • 译文:1篇
    • 评论:3条
    文章分类
    最新评论