SNMP PDU中的变量绑定 [英] Variable binding in SNMP PDU

查看:356
本文介绍了SNMP PDU中的变量绑定的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在用C#开发一个Snmp实用程序,可以从设备的指定Oid获取数据.我正在使用Snmp version1数据包格式.
我已经快完成了,但是他们是我无法解决的问题.

我通过发送单个"Get"数据包成功查询了一个变量,但我需要通过发送单个数据包查询多个变量.

我以这种方式尝试过:

I am developing a Snmp utility in C# which can fetch data from a specified Oid of a device.I am using Snmp version1 packet format.
I have almost completed it but their is a problem that I am not able to resolve.

I am successfully querying one variable by sending single "Get" packet but I need to query multiple variables by sending single packet.

I tried it in this way:

//variable bindings
                p[bytepos++] = 0x30; //variable bindings sequence
                p[bytepos++] = Convert.ToByte(6 + oid_len - 1 + 6 + oid_len2 - 1); // Size of variable binding

                p[bytepos++] = 0x30; //first variable bindings sequence
                p[bytepos++] = Convert.ToByte(4 + oid_len - 1); // size
                p[bytepos++] = 0x06; //Object type
                p[bytepos++] = Convert.ToByte(oid_len - 1 ); //length
                //Start of MIB
                p[bytepos++] = 0x2b;
                for (i = 2; i < oid_len; i++)
                    p[bytepos++] = Convert.ToByte(oid[i]);
                p[bytepos++] = 0x05; //Null object value
                p[bytepos++] = 0x00; //Null


                //start of second variable bindings sequence
                p[bytepos++] = 0x30; //Second variable bindings sequence
                p[bytepos++] = Convert.ToByte(4 + oid_len2 - 1 ); // size
                p[bytepos++] = 0x06; //Object type
                p[bytepos++] = Convert.ToByte(oid_len2 - 1); //length
                //Start of MIB
                p[bytepos++] = 0x2b;
                //Place MIB array in packet
                for (i2 = 2; i2 < oid_len2; i2++)
                    p[bytepos++] = Convert.ToByte(oid2[i2]);
                p[bytepos++] = 0x05; //Null object value
                p[bytepos++] = 0x00; //Null





我在Google上搜索了很多,但是找不到任何相关的东西.请帮忙!





I googled a lot but couldnot find any thing relevent.Please Help!!

推荐答案

要在一个绑定中获取多个变量,您需要在OID后面附加一个另一个,然后您必须调整数据包中的长度字节.

以下是SNMPv1 GetRequest的转储.单个数据包中包装了五个OID.红色突出显示的是社区字符串(公共),下划线是第一个,第三个和第五个OID.

0000 30 82 01 21 02 01 00 04 06 70 75 62 6c 69 63 a0
0010 82 01 12 02 02 4e 9b 02 01 00 02 01 00 30 82 01
0020 04 30 18 06 14 2b 06 01 04 01 ab 57 01 0b 03 02
0030 01 02 05 01 07 03 31 2d 31 05 00 30 18 06 14 2b
0040 06 01 04 01 ab 57 01 0b 03 02 01 02 05 01 08 03
0050 31 2d 31 05 00 30 18 06 14 2b 06 01 04 01 ab 57
0060 01 0b 03 02 01 02 05 01 09 03 31 2d 31 05 00 30
0070 18 06 14 2b 06 01 04 01 ab 57 01 0b 03 02 01 02
0080 05 01 02 03 31 2d 32 05 00 30 18 06 14 2b 06 01
0090 04 01 ab 57 01 0b 03 02 01 02 05 01 03 03 31 2d
00a0 32 05 00 ED 52

让我们获取第三个OID:
18 06 14 2b 06 01 04 01 ab 57 01 0b 03 02 01 02 05 01 08 03 31 2d 31 05 00

哪里,
18是该OID的长度(以十六进制表示).此处为24个字节
14 2b ... 31 05 00是OID

30是分隔符.您可以在每个OID的开头看到30.
To get multiple variables in one binding, you need to append OID''s one after another and then you must adjust length bytes in the packet.

Following is the dump of SNMPv1 GetRequest. There are five OIDs packed in a single packet. Highlighted in red is community string(public) and underlined are the first, third and fifth OID.

0000 30 82 01 21 02 01 00 04 06 70 75 62 6c 69 63 a0
0010 82 01 12 02 02 4e 9b 02 01 00 02 01 00 30 82 01
0020 04 30 18 06 14 2b 06 01 04 01 ab 57 01 0b 03 02
0030 01 02 05 01 07 03 31 2d 31 05 00 30 18 06 14 2b
0040 06 01 04 01 ab 57 01 0b 03 02 01 02 05 01 08 03
0050 31 2d 31 05 00 30 18 06 14 2b 06 01 04 01 ab 57
0060 01 0b 03 02 01 02 05 01 09 03 31 2d 31 05 00 30
0070 18 06 14 2b 06 01 04 01 ab 57 01 0b 03 02 01 02
0080 05 01 02 03 31 2d 32 05 00 30 18 06 14 2b 06 01
0090 04 01 ab 57 01 0b 03 02 01 02 05 01 03 03 31 2d
00a0 32 05 00 ED 52

Let take the third OID:
18 06 14 2b 06 01 04 01 ab 57 01 0b 03 02 01 02 05 01 08 03 31 2d 31 05 00

Where,
18 is Length of that OID (in Hex). Here 24 bytes
14 2b ... 31 05 00 is OID

30 is seperator. You can see 30 at the start of every OID.


这篇关于SNMP PDU中的变量绑定的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆