Running Raddle (2): snmpd & Replay Custom Private Enterprise MIB
Net-SNMP wiki gives tutorial on extending snmpd
using Perl. In basic run of Raddle (previous post) this involves r1.pl
called by r1.conf
fed to snmpd
. Private enterprise MIB i.e. Microchip’s in this example can be replayed without really ever captured the real device’s SNMP data. This is necessary when the actual device is yet existed; normal situation when developing. There are two simple ways of replaying this artificial SNMP data over which either way requires correct OID.
First put the Microchip.TXT
(the MIB file) under /usr/share/snmp/mibs
to easily exchange OID canonical form and name vice versa while making dummy. In this case I’ve modify the MIB to have some additional object i.e. name
:
$ snmptranslate -m +Microchip -On Microchip::name
.1.3.6.1.4.1.17095.1.1
so we can then use this correct OID for our dummy.
How?
- use
SetMIBValue()
inr1.pl
$agent->SetMIBValue( '.1.3.6.1.4.1.17095.1.1', ASN_OCTET_STR, "Microchip"); $agent->SetMIBValue( '.1.3.6.1.4.1.17095.3.13', ASN_INTEGER, 82);
- Feed
r1.snmp
for playing as in$agent->ParseDataFile( '/usr/local/etc/snmp-emulator/r1.snmp', 0 )
with the content of
.1.3.6.1.4.1.17095.1.1 = STRING: Microchip .1.3.6.1.4.1.17095.3.13 = INTEGER: 82
In all above two examples we can only GET
for Raddle to return an answer for each OID. GETNEXT
as in bulk snmpwalk
won’t give output because they are not sequenced.
A sample of sequenced data inside a real snmpwalk
dump is:
$ snmpwalk -v 1 -c public -On localhost .1.3.6.1.2.1.1.1.0 = STRING: Linux xp-racy 2.6.38-10-generic #46~lucid1-Ubuntu SMP Wed Jul 6 18:40:11 UTC 2011 i686 .1.3.6.1.2.1.1.2.0 = OID: .1.3.6.1.4.1.8072.3.2.10 .1.3.6.1.2.1.1.3.0 = Timeticks: (496371) 1:22:43.71 .1.3.6.1.2.1.1.4.0 = STRING: Root (configure /etc/snmp/snmpd.local.conf) .1.3.6.1.2.1.1.5.0 = STRING: .1.3.6.1.2.1.1.6.0 = STRING: Unknown (configure /etc/snmp/snmpd.local.conf) .1.3.6.1.2.1.1.8.0 = Timeticks: (0) 0:00:00.00 .1.3.6.1.2.1.1.9.1.2.1 = OID: .1.3.6.1.6.3.10.3.1.1 .1.3.6.1.2.1.1.9.1.2.2 = OID: .1.3.6.1.6.3.11.3.1.1
thus, we can only
$ snmpget -m +Microchip -v 1 -c public localhost Microchip::control.13 Microchip::control.13 = INTEGER: 82
or from other system with no Microchip MIB use
$ snmpget -v 1 -c public 192.168.40.105 .1.3.6.1.4.1.17095.3.13 SNMPv2-SMI::enterprises.17095.3.13 = INTEGER: 82
The tree below may visually explains sequenced data for GETNEXT
where our Microchip is branched at private.enterprises.microchip
:
$ snmptranslate -m +Microchip -Tp +--iso(1) | +--org(3) | +--dod(6) | +--internet(1) | +--directory(1) | +--mgmt(2) | | | +--mib-2(1) | | | +--system(1) | | | ... +--private(4) | | ... | +--enterprises(1) | | ... | +--microchip(17095) | | | +--product(1) | | |
How GET
and GETNEXT
appeared in SNMP can be viewed by running snmpd in debug mode with this options:
$ snmpd -m +Microchip -f -L -V -C -I vacm_vars -c /usr/local/etc/snmp-emulator/r1.conf NET-SNMP version 5.3.1 Connection from UDP: [127.0.0.1]:32770 Received SNMP packet(s) from UDP: [127.0.0.1]:32770 GET message -- control.13
About
+Arif Kusbandono
Recently
Et Cetera
© logIt. Powered by WordPress using the DePo Skinny Tweaked Theme.