Need help to decode snmp string

Hi

I'm a ruby newbie and need a little help. I think I'm wrong with class and instance methods? I can't figure out how to do a decode a snmp output.

I use the snmp library http://rubyforge.org/projects/snmplib/

My script:

#!/usr/local/bin/ruby18 -w
require "rubygems"
gem "snmp"
require "snmp"

SNMP::Manager.open(:Host => '192.168.0.253', :Version => :SNMPv1, :Community => 'public') do |manager|
  manager.load_module("RC-VLAN-MIB")
  48.times do |i|
     i = i+1
     response = manager.get(["rcVlanPortVlanIds.#{i}"])
     response.each_varbind do |varbind|
        p varbind.value
     end
  end
end

The output is like this

"\000\001\000\004\000\005\000\006\000\f"
"\000\001\000\f"
"\000\001\000\002\000\005\000\006\000\a\000\b\000\v\000\f\000\r"
"\000\001"

But I want to decode this output to integer vlan id's.

1,4,5,6,12
1,12
1,2,5,6,7,8,11,12,13
1

How can I do it with methodes from the snmp library? I'm playing with decode and decode_value. But the only result was

"undefined method `decode' for #<SNMP::VarBind:0x801fc7ca0> (NoMethodError)"

But "decode" is a (Public Class) methode of VarBind and I don't understand what's wrong.

http://snmplib.rubyforge.org/doc/index.html

Also I don't understand why "f" stands for "12" and "v" for "11" and "r" for "13"

ruby says it is a octet string ("p varbind.value.asn1_type" shows "OCTET STRING")

With net-snmp I fetch vlan ids per port in hex

  snmpwalk -v 1 -c public -m RC-VLAN-MIB 192.168.0.253 .1.3.6.1.4.1.2272.1.3.3.1.3

I get:

  RC-VLAN-MIB::rcVlanPortVlanIds.1 = Hex-STRING: 00 01 00 04 00 05 00 06 00 0C
  RC-VLAN-MIB::rcVlanPortVlanIds.2 = Hex-STRING: 00 01 00 0C
  RC-VLAN-MIB::rcVlanPortVlanIds.3 = Hex-STRING: 00 01 00 02 00 05 00 06 00 07 00 08 00 0B 00 0C

Nicola

Nicola Tiling wrote:

The output is like this

"\000\001\000\004\000\005\000\006\000\f"
"\000\001\000\f"
"\000\001\000\002\000\005\000\006\000\a\000\b\000\v\000\f\000\r"
"\000\001"

But I want to decode this output to integer vlan id's.

1,4,5,6,12
1,12
1,2,5,6,7,8,11,12,13
1

How can I do it with methodes from the snmp library?

I don't know much about the SNMP library. However:

irb(main):002:0> "\000\001\000\004\000\005\000\006\000\f".unpack("n*")
=> [1, 4, 5, 6, 12]

Also I don't understand why "f" stands for "12" and "v" for "11" and "r"
for "13"

\v is an escape for "vertical tab", \f is an escape for "form feed", and
\r is "carriage return". These are ASCII characters with codes 11, 12
and 13 respectively.

irb(main):006:0> "\f"[0]
=> 12

[ruby 1.8, use ord for ruby 1.9]

···

--
Posted via http://www.ruby-forum.com/\.

Thanks! Life could be so easy ...

···

Am 23.05.2010 um 18:51 schrieb Brian Candler:

Nicola Tiling wrote:

The output is like this

"\000\001\000\004\000\005\000\006\000\f"
"\000\001\000\f"
"\000\001\000\002\000\005\000\006\000\a\000\b\000\v\000\f\000\r"
"\000\001"

But I want to decode this output to integer vlan id's.

1,4,5,6,12
1,12
1,2,5,6,7,8,11,12,13
1

How can I do it with methodes from the snmp library?

I don't know much about the SNMP library. However:

irb(main):002:0> "\000\001\000\004\000\005\000\006\000\f".unpack("n*")
=> [1, 4, 5, 6, 12]

Also I don't understand why "f" stands for "12" and "v" for "11" and "r"
for "13"

\v is an escape for "vertical tab", \f is an escape for "form feed", and
\r is "carriage return". These are ASCII characters with codes 11, 12
and 13 respectively.

irb(main):006:0> "\f"[0]
=> 12

[ruby 1.8, use ord for ruby 1.9]

--
Posted via http://www.ruby-forum.com/\.