zoukankan      html  css  js  c++  java
  • 关于snmp octet string和普通string问题

    我是获取的Octet String用String输出,输出的是一连串的2个16进制数 空格。;然后想对输出结果操作,得到我想要的值。
    解决方案:private static string exchange(string input) { int number = (input.Length 1) / 3; string strReturn = ""; string[] strArray = input.Split(' '); byte[] byteArray = new byte[2]; byte[] retByte = new byte[strArray.Length]; int intTemp; string c; for (int i = 0; i < strArray.Length; i ) { intTemp = Convert.ToInt32(strArray[i], 16); if (intTemp > 122) { byteArray = new byte[2] { (byte) intTemp, (byte) Convert.ToInt32(strArray[i 1], 16) }; c = System.Text.Encoding.Default.GetString(byteArray); i ; } else c = Convert.ToChar(intTemp).ToString(); strReturn = strReturn c; } return strReturn; }


    octet string是字节串,即用十六进制串表示字节序列。如真正的字节序列是 1 2 3 4,用字节串则表示为31 32 33 34,具体的转换方法为:
    1、先看字节串有多长,因为一个字节要用到三个字符(两位数符加一个空格,如果有空格的话),然后将之除以3,得到字节的数目,然后由此申请空间,用GetMem或动态数组 SetLength均可;
    2、取出每两个字符,用HexToBin转换为一个字节放到结果中;
    3、跳过空格;
    4、重复2、3直至串结束。

    注意,看看你的实际的octet string中有没有空格,如果没有,则上面做相应调整。


    0xFF:FD:FF:0F:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
    这个数据是用工具取出来的?
    如果是mib leaf的类型是PortList,那么根据PortList的定义,端口1~14,16~24,29~32在这个Vlan下。

    字节顺序是指占内存多于一个字节类型的数据在内存中的存放顺序,有小端、大端两种字节顺序。小端字节序指低字节数据存放在内存低地址处,高字节数据存放在内存高地址处;大端字节序是高字节数据存放在低地址处,低字节数据存放在高地址处。不同的CPU有不同的字节序类型,基于X86平台的PC机是小端字节序的;而网络字节序就是大端字节序。

    Byte[]转十六进制
    // 字节转十六进制
    private static char[] hexDigits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
    internal static string ToHexString(byte[] bytes)
    {
    char[] chars = new char[bytes.Length * 2];
    for (int i = 0; i < bytes.Length; i++)
    {
    int b = bytes[i];
    chars[i * 2] = hexDigits[b >> 4];
    chars[i * 2 + 1] = hexDigits[b & 0xF];
    }
    return new string(chars);
    }
    分类
    ---------------------
    作者:fs20041242
    来源:CSDN
    原文:https://blog.csdn.net/fs20041242/article/details/83841998
    版权声明:本文为博主原创文章,转载请附上博文链接!

    SMI信息管理结构中定义了12种数据类型,一般MIB中常见的有INTERGER、DisplayString、OCTET STRING、OBJECT IDENTIFIER等几种。其中OCTET STRING为0或多个8 bit字节,每个字节值在0~255之间;DisplayString为0或多个8bit字节,但是每个字节必须是ASCII码,在MIB-II中,所有该类型的变量不能超过255个字符(0个字符是可以的)。
    除了字符范围不一样之外,DisplayString和OCTET STRING这两种类型并没有什么差别,在net-snmp中,它们都是用的ASN_OCTET_STR类型返回。但是在值的显示上,它们是有区别的。前者按一般的字符串形式显示,如commonNEVendorInfo.0:-->Linux。后者按照十六进制字节流显示(每个字节间以空格分隔),如commonPhysAddress.0:-->00 23 b8 00 00 7b。
    我们先看一下trap的格式(man snmptrap):

    本文关注的是“[OID TYPE VALUE]...”的变量绑定部分,TYPE的定义如下:

    一般trap中绑定的变量都是int或string类型,发送绑定这两种类型的变量的trap如下:
    snmptrap -v 1 -c public 192.168.42.115 .1.3.6.1.4.1.17409.1.6 192.168.42.145 6 1 12345 OID i 12 OID s hello;
    OCTET STRING类型的OID的值处理要特殊一点,要先将字符串格式化为16进制的字节流,伪代码如下:
    char oct_str[SIZE];
    char str[] = "hello";
    snprintf(oct_str, SIZE, "%02x%02x....", str[0], str[1],...);

    作者:wuchuan53
    来源:CSDN
    原文:https://blog.csdn.net/wuchuanlove53/article/details/18214713
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    spring cloud微服务docker启动
    docker安装mysql5.7
    Spring Boot CommandLineRunner的使用
    IDEA Java 源发行版 8 需要目标发行版 1.8
    Centos6.5安装Python2.7.9
    Hive在drop表的时候报错
    反向读取Mysql数据库表结构到PowerDesigner中
    SpringCloud与Consul集成实现负载均衡
    Mac系统安装和卸载brew包管理
    Consul集群搭建
  • 原文地址:https://www.cnblogs.com/gaoshaonian/p/10750318.html
Copyright © 2011-2022 走看看