Introducción a SNMP con Python: PySNMP (Parte 1) - El protocolo y los comandos Por Gaël Pegliasco Pegliasco - publicado el 03/03/2016, publicado en 22/04/2016 SNMP es un protocolo de superisi!n de red uniersal"ente popular# $ste es el est%ndar utili&ado por casi todos los e'uipos de red# (e per"ite "onitorear )consultar * "odi+icar todos los tipos de ard.are, desde el enrutador asta la i"presora, e incluso algunas ca+eteras conectadas#
Introducción Introducción - Parte uno $ste tutorial le propone descubrir la biblioteca de P*ton P*SNMP 'ue per"ite dialogar con cual'uier "aterial co"patible con el protocolo del "is"o no"bre# Sin e"bargo, antes de e"barcarse en una presentaci!n tcnica 'ue describe c!"o eecutar una consulta get o set en SNMP 2 o 3, propone"os una presentaci!n de los conceptos de este protocolo# $sto le per"itir% co"prender "eor los entresios de la librera con el +in de llearlo al Grial absoluto de su co"pleto do"inio# $n esta pri"era parte presenta"os el protocolo SNMP * el uso de co"andos del siste"a 'ue le per"itir%n tocar los conceptos 'ue epone"os# l +inal de este tutorial de 4 partes, nor"al"ente podr%s5
$ecutar consultas G$ / S$ $niar tra"pas
7ree sondeos para erra"ientas de superisi!n co"o Nagios co"o Nagios , 7entreon * otros#
7rear un agente SNMP
ntes de seguir le*endo este artculo, si es nueo en el te"a, lo inito a leer esta introducci!n a la superisi!n 'ue superisi!n 'ue le dar% las bases tcnicas para co"prender este trabao, as co"o sus proble"as * erra"ientas a su disposici!n# $sta lectura te a*udar% a ubicar "eor el lugar de SNMP en este unierso# $l docu"ento est% "u* orientado Nagios * deriados, pero le proporcionar% todos los ele"entos b%sicos para co"prender correcta"ente esta disciplina#
plan
Presentaci!n del protocolo o SNMP o
M89
o
SN1
o
Mar'ue con agentes usando los co"andos del siste"a
p*sn"p o
$le"entos b%sicos
o
(as solicitudes
o
(as tablas
o
:sa tus M89 con un agente
¿Qu es SNMP! SNMP signi+ica Protocolo si"ple de ad"inistraci!n de red $s un protocolo de gesti!n de red# 7oncreta"ente per"ite superisar el estado de la red de e'uipos o un par'ue in+or"%tico, as co"o el "aterial co"o los sericios5
$nrutadores, interruptores $staciones de trabao
i"presoras
Sericios )"ensaera, +tp, ss, ttp, proceso, "e"oria ###
Por superisi!n, es necesario entender para obtener in+or"aci!n sobre el estado de estos ele"entos# Pero este protocolo ta"bin per"ite llear a cabo acciones de "anteni"iento co"o reiniciar un sericio o una "%'uina, li"piar los cabe&ales de lectura de una i"presora, etc#
ntes de seguir le*endo este artculo, si es nueo en el te"a, lo inito a leer esta introducci!n a la superisi!n 'ue superisi!n 'ue le dar% las bases tcnicas para co"prender este trabao, as co"o sus proble"as * erra"ientas a su disposici!n# $sta lectura te a*udar% a ubicar "eor el lugar de SNMP en este unierso# $l docu"ento est% "u* orientado Nagios * deriados, pero le proporcionar% todos los ele"entos b%sicos para co"prender correcta"ente esta disciplina#
plan
Presentaci!n del protocolo o SNMP o
M89
o
SN1
o
Mar'ue con agentes usando los co"andos del siste"a
p*sn"p o
$le"entos b%sicos
o
(as solicitudes
o
(as tablas
o
:sa tus M89 con un agente
¿Qu es SNMP! SNMP signi+ica Protocolo si"ple de ad"inistraci!n de red $s un protocolo de gesti!n de red# 7oncreta"ente per"ite superisar el estado de la red de e'uipos o un par'ue in+or"%tico, as co"o el "aterial co"o los sericios5
$nrutadores, interruptores $staciones de trabao
i"presoras
Sericios )"ensaera, +tp, ss, ttp, proceso, "e"oria ###
Por superisi!n, es necesario entender para obtener in+or"aci!n sobre el estado de estos ele"entos# Pero este protocolo ta"bin per"ite llear a cabo acciones de "anteni"iento co"o reiniciar un sericio o una "%'uina, li"piar los cabe&ales de lectura de una i"presora, etc#
"ómo #unciona SNMP
SNMP se basa en la idea de 'ue un siste"a de superisi!n de red consiste en5
Nodos ad"inistrados, cada uno con un agente $l agente es el sericio )so+t.are 'ue dialoga con los gerentes para interca"biar in+or"aci!n sobre el estado del nodo l "enos una estaci!n de ad"inistraci!n, el ad"inistrador )Net.or; Manage"ent Station :n protocolo para interca"biar in+or"aci!n entre los agentes * el NMS, este protocolo es SNMP
$l sitio de .i;ipedia o+rece una bree una bree presentaci!n de presentaci!n de este 7 'ue la describen#
Gerente y agentes (fuente PySNMP (fuente PySNMP ) ) ¿"ómo #unciona!
$l ad"inistrador ena solicitudes de tipo G$ a los agentes para recuperar in+or"aci!n sobre un sericio / "%'uina a tras del protocolo SNMP
a"bin puede eniar solicitudes S$ para "odi+icar el estado de los sericios * / o la "%'uina ad"inistrada por el agente (os agentes pueden eniar solicitudes de =P al ad"inistrador para in+or"ar un "al +unciona"iento (os agentes se pueden agrupar a tras de un agente "aestro (a in+or"aci!n accesible * proista por los agentes se organi&a en una base de datos irtual lla"ada M89# $sta base est% estandari&ada#
Intercambio de solicitudes solicitudes entre el administrador administrador y los agentes (fuente wikipedia wikipedia ) ) Eso es todo. Es todo. Es simple
¿Por $u usar SNMP!
$s un protocolo "u* antiguo * es co"patible con casi todos los proeedores de ard.are de red# ?esde las ersiones 2 * 3 es seguro, o+rece acceso restringido a cierta in+or"aci!n * se basa en protocolos de encriptaci!n co"o SS@ * (S )pero con sus propias bibliotecas * erra"ientas internas# (a in+or"aci!n contenida en las M89 est% estandari&ada, es decir 'ue sea cual sea el dispositio * su +abricante, se podr% acceder a la "is"a in+or"aci!n en el "is"o lugar * de la "is"a "anera# A eso es genial5 :sted es un ad"inistrador de red, desea conocer la "e"oria total * disponible de una "%'uina, la obtendr% de la "is"a +or"a sea cual sea el siste"a operatio )"ac /
.indo.s / uni / android * el ard.are utili&ado )M?, =M, 8ntel, ### # BNo es +abulosoC
$s si"ple )los agentes son liianos, la co"pleidad es deportada a niel de los gerentes $s independiente de la ar'uitectura de red * los ele"entos )P7, i"presoras, enrutadores, ### $s etensible, puede personali&ar las bases de datos ade"%s de lo 'ue o+rece el est%ndar Dl es robusto# Se basa en :?P o 7P5 odaa +uncionar% cuando la red tenga graes proble"as de cuello de botella5 un "arco de in+or"aci!n :?P es liiano#
¿Es tan %ueno!
$n general, es bastante bueno *, sobre todo, tiene pocos co"petidores "aduros * generali&ados, pero5
eces, sin e"bargo, no es "u* si"ple5 los M89 son legibles por el o"bre, pero para citar a uno de "is colegas, a eces, los 'ue llegan all no son real"ente u"anos# $l protocolo es si"ple pero su i"ple"entaci!n puede ser "uco "%s co"plea# (a ersi!n 3 a i"ple"entado su propia capa SS@ en lugar de acer @PS )@P sobre SS@# $sto di+iculta la co"unicaci!n5 no a* autonegociaci!n para el ci+rado * debe proporcionar E in+or"aci!n para crear una conei!n segura# lgunos co"petidores est%n e"pe&ando a surgir co"o FM8 * o+recen un lenguae de consulta "%s rico )F(#
histórico
(a pri"era ersi!n del protocolo data de 1HIH No o+rece seguridad * utili&a la ersi!n 1 de M89, 'ue sigue siendo bastante si"ple (a segunda ersi!n +ue publicada en 1HH3 o
9rinda "%s seguridad en tr"inos de autenticaci!n * encriptaci!n
o
Per"ite la ad"inistraci!n distribuida
o
rae una ersi!n "%s rica de la M89 )M89-2
(a ersi!n 3 +ue publicada en 1HHI o
rae transacciones ci+radas a tras de SS@
o
$s "%s "odular
En los hechos
(a ersi!n 2 tuo proble"as para co"en&ar * se icieron arios lan&a"ientos# $s la ersi!n 2c 'ue a ganado# (e aconseo sobre este te"a le*endo esta presentaci!n de SNMP 'ue describe un poco "%s estas di+icultades de puesta en "arca * la presentaci!n de P*SNMP 'ue to"a algunos de estos puntos# Jersi!n 3, al igual 'ue la 2 ta"bin a tenido proble"as para i"ponerse# No es co"patible con todos los "ateriales de o* aun'ue a "eorado# (os proble"as de seguridad se an uelto "u* sensibles o* en da * es la ersi!n reco"endada#
SNMP do"ina el "undo 7P / 8P * es el est%ndar reco"endado desde "a*o de 1HH0
MI& ntes de 'ue poda"os lan&ar nuestras pri"eras consultas SNMP, es i"portante entender 'u es una M89# (a 9ase de in+or"aci!n de gesti!n es una base de datos irtual para organi&ar er%r'uica"ente la in+or"aci!n proporcionada por los agentes en el e'uipo# $sta no es una base de datos estricta"ente ablando co"o una base de datos relacional# $iste solo a tras del agente 'ue es libre de i"ple"entarlo co"o lo desee# 7uando el agente no +unciona, no a* datos en el M89# Solo eiste la descripci!n del M89 )general"ente un arcio de teto# :n M89 en realidad describe c!"o nu"erar / acceder a la in+or"aci!n# $s el agente )el so+t.are el 'ue al"acena )pero debera decir 'ue gestiona esta in+or"aci!n, 'ue a "enudo es ol%til, co"o 'uiere# $s "u* i"portante co"prender el punto anterior, 'ue es lo 'ue a "enudo di+iculta la co"prensi!n de las M89 por parte de los recin llegados en este protocolo# o"e el ee"plo de la cantidad de procesos actios en una "%'uina# Dste est% identi+icado de "anera
$l gerente le pide la in+or"aci!n al agente $l agente recibe la solicitud * lla"a a un siste"a pri"itio para obtenerlo
$l agente deuele la in+or"aci!n al gerente
$s in+or"aci!n ol%til 'ue no es real"ente al"acenable# :na gran cantidad de in+or"aci!n de M89 es de esta naturale&a, otros a eces se al"acenan en alg
:na de las M89 "%s conocidas es M89-88, descrita por =>7 1213 # Se i"ple"enta en casi todos los dispositios 7P / 8P# iene die& grupos5
siste"a las inter+aces
raducci!n de direcciones
8P
87MP
7P
:?P
$GP
trans"isi!n
* SNMP
$s decir, cual'uier in+or"aci!n 'ue pueda solicitar sobre M89-88 se colocar% en uno de estos grupos# lgunos ee"plos de in+or"aci!n 'ue puede encontrar en estos conuntos son5
la lista de procesos )con in+or"aci!n de "e"oria * 7P:L elocidades de redL
el pro"edio de cargaL
uso de "e"oriaL
contacto del siste"a, tie"po de actiidadL
el uso de espacio en discoL
las tablas de enruta"iento
E'emplo de una descripción de un MI&
>inal"ente, los "ibs se describen en un lenguae lla"ado SN#1# $l siguiente ee"plo "uestra la in+or"aci!n descripci!n de la inter+a& )red co"o se describe en SN#15 ifDescr OBJETO DE TIPO SYNTAX DisplayString (SIZE (0!""## A$$ESO solo lect%ra ESTADO o&ligatorio DES$'IP$IN )*na ca+ena +e te,to -%e contiene infor.aci/n so&re el interfa Esta ca+ena +e&e incl%ir el no.&re +e el fa&ricante1 el no.&re +el pro+%cto y la 2ersi/n +e la interfa +e 3ar+4are ) 55 6 7ifEntry !8
(eer la de+inici!n de estos datos es bastante co"prensible por s "is"o# 8ndica"os a'u5
su no"bre, i+?escr su tipo, ?ispla*String, una cadena de asta 2EE caracteres
su "odo de acceso, solo lectura
su estado, obligatorio
+inal"ente su ubicaci!n en el nodo padre i+$ntr*5 segundo subele"ento del nodo i+$ntr*
rani*ación de in#ormación en MI&
Para co"prender esta descripci!n er%r'uica de los datos i+?escr, a'u a* un gr%+ico 'ue representa la erar'ua principal de todas las M895
erar'ua principal de un M89 ) Ser!icio de "ikipedia ) $l gr%+ico de arriba "uestra la estructura er%r'uica de las M89# ?ebao del nodo ra&, sealado # OSon 3 in+or"aci!n nu"erada5
778 con el n<"ero 0 8SK con el n<"ero 1
8SK - 778 con el n<"ero 2
?ebao del nodo 8SK a* 4 in+or"aci!n, ta"bin nu"erada5
est%ndar, con el n<"ero 0 autoridad de registro, con el n<"ero 1
"ie"bro del cuerpo, con el n<"ero 2
organi&aci!n, con el n<"ero 3
(a ruta a la in+or"aci!n de la organi&aci!n bao 8SK, 'ue se encuentra debao de la ra&, ser% #1#3 o #8SK#organi&ation A as enseguida# Por ee"plo, el acceso a la in+or"aci!n M89-2 se reali&ar% a tras de la ruta #1#3#6#1#2#1 o #8SK#organi&ation#?o?#8nternet#"anage"ent#M89-2 A aora, usted sabe todo sobre las M895 de+inen la in+or"aci!n en SN#1, 'ue es accesible a tras de una ruta epresada con n<"eros o no"bres de in+or"aci!n principal#
I+s
Por lo tanto, la in+or"aci!n se nu"era de acuerdo con su orden en el %rbol M89, estos n<"eros se deno"inan K8? )Kbect 8?enti+ier# 'u a* algunos ee"plos de K8?5
#1#3#6#1#2#1#1 siste"a5 tie"po de actiidad, contacto, no"bre #1#3#6#1#2#1#2 inter+aces5 inter+aces de red
#1#3#6#1#2#1#4 enruta"iento ip5 ip, etc#
#1#3#6#1#2#1#E ic"p5 errores ic"p, descartes ### )ic"p es, por ee"plo, ping
#1#3#6#1#2#1#6 / tcp o udp5 estado de conei!n tcp o udp
,a pregunta aora se conierte en Bc!"o encontrar toda la in+or"aci!n disponible en un
M89C (as respuestas ser%n5
l leer los est%ndares * est%ndares asociados5 ttps5//tools#iet+#org/t"l/r+c1213 $ecutando consultas con erra"ientas SNMP 'ue le per"iten naegar por el %rbol co"pleto de una M89# $a"inando estos M89 a tras de sitios .eb 'ue tienen la a"abilidad de representarlos +%cil"ente, co"o el sitio .eb de 8P MKN8K= #
Se obserar% en este
@a* "ucos M895
?ependiendo del ard.are )enrutador, i"presora, la in+or"aci!n es di+erente# Por esta ra&!n, algunos dispositios o constructores proporcionan sus propios M89 'ue de+inen una ra"a en el %rbol K8?, con un n<"ero o+icial de+inido por la utoridad de n<"eros asignados de 8nternet )8N# Por ee"plo, encontra"os 78S7K en esta ra"a del %rbol5 iso#org#dod#internet#priate#entreprise#cisco Q 1#3#6#1#4#1#H $n esta ubicaci!n, 78S7K es libre de o+recer M89 describiendo la in+or"aci!n de su propio ard.are co"o lo considere oportuno# Mucas otras co"paas acen lo "is"o, co"o lcatel / No;ia por no"brar algunas#
$l sitio de 8P Monitor tiene "ucas bases de datos )"ib para di+erentes tipos de in+or"aci!n / "ateriales / sericios 'ue puede consultar#
"omunidades $l acceso a la in+or"aci!n de un M89 se +iltra por lo 'ue se lla"a la co"unidad, ecepto la ersi!n 3 del protocolo# 7o"unidad es un tipo de palabra co"partida, p
(a co"unidad p
Por lo tanto, cuando desee acceder o editar la in+or"aci!n de un agente, usted5
eniar una solicitud G$ / S$ al agente proporcionando la ruta de la in+or"aci!n deseada, su K8?
proporcionando la co"unidad utili&ada )priada para los ca"bios
proporcionando el nueo alor de los datos en caso de "odi+icaci!n
proporcionar la direcci!n 8P / no"bre de do"inio o eecutar el agente
el puerto utili&ado es por de+ecto el puerto 161
2sando el protocolo de l4nea de comando Para co"prender co"pleta"ente lo 'ue este protocolo per"ite, propongo eecutar los co"andos b%sicos con las erra"ientas del siste"a# $sto tocar% los "ecanis"os sub*acentes * garanti&ar% 'ue los agentes entiendan sus consultas antes de escribirlas en P*ton# ,as órdenes
ntes de lan&ar nuestros pri"eros pedidos, ea"os los tipos de solicitudes 'ue el protocolo propone para per"itir 'ue los ad"inistradores * agentes interca"bien in+or"aci!n5
%tena 5 solicitando el alor de un K8? por el ad"inistrador al agente
$l agente deuele la in+or"aci!n a tras de un "ensae tipo =espuesta
5etNe6t 5 solicite la siguiente in+or"aci!n en el M89
$plora una M89 sin saber lo 'ue contiene
Esta%lecer 5 ca"bia el alor asociado con un K8?
7a"biar la con+iguraci!n o ca"biar el estado de un ost
5et&ul7 5 solicita un conunto co"pleto de in+or"aci!n en una sola consulta#
$ite "ultiplicar Get * GetNet
8espuesta 5 "ensae eniado por el agente al ad"inistrador 'ue contiene la
in+or"aci!n solicitada
9rampa 5 "ensae eniado por el agente al ad"inistrador para in+or"ar un
proble"a
In#ormar 5 "ensae eniado por el gerente para con+ir"ar la recepci!n de la tra"pa
8e$uisitos pre3ios
Para lan&ar nuestros pri"eros pedidos, es necesario tener un agente * un gerente# =eco"iendo este ecelente tutorial para dica instalaci!n en una "%'uina (inu )tipo debian# Para el ad"inistrador, puede instalar las erra"ientas b%sicas sn"p * "ib a tras de estos co"andos s%+o apt9get install sn.p sn.p9.i&s9+o4nloa+er s%+o apt9get install s.itools li&s.i
$ntonces necesitas un agente# Para encontrarlo, puedes5
Pruebe con una i"presora de red o una "%'uina con una direcci!n 8P General"ente son co"patibles con el protocolo SNMP 8nstale su propio agente siguiendo el tutorial "encionado anterior"ente 8nicie sus pedidos al agente de"o#sn"plabs#co" de acceso libre a tras de 8nternet, lo cual are"os#
>inal"ente, si no tiene la posibilidad de instalar co"andos SNMP en su (inu, sepa 'ue la biblioteca P*SNMP o+rece scripts e'uialentes puros de P*ton 'ue puede instalar con el co"ando pip install p*sn"p-apps# El comando &9ENE8
cepta arios par%"etros, 'ue inclu*en5
-5 ersi!n del protocolo -c5 co"unidad
-K5 +or"ato de salida )prueba a, +, n, s, ###
$e"plo5 $ snmpget -v2c -c public -Oa demo.snmplabs.com sysDescr.0 SN:P2!9:IB 55 sysDescr0 6 ST'IN;5 S%nOS e%ssn.pla&sco. <=>?*= = s%n<.
(a ersi!n de protocolo a usar es obligatoria, en el co"ando anterior usa"os el protocolo de la ersi!n 2c * la co"unidad p
El comando %tener siuiente
cepta los "is"os par%"etros 'ue G$ pero no deuele el K8? solicitado, sino el 'ue sigue en el %rbol# l agrupar un G$ * arios G$ N$R, puede consultar todo el %rbol de un M89# @ snmpgetnext -v2c -Oa -c public -Os demo.snmplabs.com sysDescr.0 sysObjectID.0 6 OID5 e.presas!0<0 @ snmpgetnext -v2c -On -c public -Os demo.snmplabs.com sysObjectID.0 sysUpTimeInstance 6 Ti.etics5 (=C0!"C># !0 +Fas1 =C5 !>5 <"C>
Puede eecutar G$ N$R en cual'uier nodo, por lo 'ue la ra& de un M89# Pero ca"inar un %rbol es un trabao duro# "omandos %tener masi3a y caminar
Para eitar eniar arios co"andos G$ uno despus del otro, lo 'ue sobrecarga los interca"bios de red, es posible solicitar consultar arios K8? a la e& a tras del co"ando G$ 9:(# Pero no todos los agentes lo ad"iten# a"bin puede utili&ar el co"ando Fal; para naegar por un %rbol co"pleto, co"o lo ara con G$ * G$ N$R# Pero es el co"ando F( el 'ue los eecutar% por ti# @ snmpal! -v2c -On -c public -Os demo.snmplabs.com system sysDescr0 6 $ADENA5 S%nOS e%ssn.pla&sco. <=>?*= = s%n<. sysO&GectID0 6 OID5 e.presas!0<0 sys*pTi.eInstance 6 Ti.etics5 (=C0!>!# !0 +Fas1 =C5 !C5 0>!
sys$ontact0 6 ST'IN;5 SN:P Ha&oratories1 infosn.pla&sco. sysNa.e0 6 ST'IN;5 e%ssn.pla&sco. sysHocation0 6 ST'IN;5 :osc1 '%sia sysSer2ices0 6 INTE;E'5 C! sysO'Hast$3ange0 6 Ti.etics5 (=C0!>!# !0 +Fas1 =C5 !C5 0>! sysO'ID= 6 OID5 e.presas!0<0== sysO'Descr= 6 ST'IN;5 n%e2o co.entario sysO'*pTi.e= 6 Ti.etics5 (=!># 05 005 0=!>
9raducir I+
$l co"ando sn"ptranslate se utili&a para traducir los K8? del "odo nu"rico al "odo de teto * iceersa# @ snmptranslate -On "#%v2-I& '' sysDescr.0 =>=!===0 @ snmptranslate (.).*.(.2.(.(.(.0 SN:P2!9:IB 55 sysDescr0
Edite un I+< el comando SE9
$l co"ando sn"pset se usa para "odi+icar el alor de un K8?# Solo est% disponible con el protocolo 2 * la co"unidad priada o el protocolo 3# $l siguiente ee"plo se proporciona para el protocolo 3# (os par%"etros utili&ados son5
-u5 usuario -l5 niel de seguridad para identi+icarte -a5 protocolo de autenticaci!n )encriptaci!n de contrasea
-5 contrasea de autenticaci!n
-5 algorit"o de ci+rado para la conei!n
-R5 contrasea / sal para encriptar la conei!n
'u es donde descubri"os el dolor del protocolo 3. 'ue i"ple"enta las coneiones SS@ sin acer SNMP sobre SS@5 no a* autonegociaci!n de algorit"os de ci+rado, es necesario especi+icar todo Tpor uno "is"oU Miserable# @ snmpget local+ost sys,ocation.0 SN:P2!9:IB 55 sysHocation0 6 ST'IN;5 ouans @ snmpset -u demo -l aut+%riv -a D -x D/"-pass( - pass2 local+ost sys,ocation.0 s 1 Tierra 1 SN:P2!9:IB 55 sysHocation0 6 $ADENA5 Tierra @ snmpget local+ost sys,ocation.0 SNMPv2-MIB :: sysLocation.0 = CADENA:
Tierra
8ecomendaciones para usar SNMP y herramientas relacionadas
(as ersiones 1 * 2 del protocolo son insu+iciente"ente seguras * nada para el pri"ero# (a protecci!n en la ersi!n 2 del protocolo se reali&a solo a tras de co"unidades 'ue no usan una contrasea# $sto es "u* dbil co"o tipo de protecci!n por'ue solo necesita saber el no"bre de la co"unidad para acceder a la in+or"aci!n de un "aterial 'ue podra ser con+idencial# (os agentes de Findo.sRP eran especial"ente conocidos por o+recer de"asiada in+or"aci!n sensible en su con+iguraci!n predeter"inada, co"o los inicios de sesi!n de los usuarios a los 'ue se poda acceder directa"ente a tras de la co"unidad pinal"ente, no pode"os reco"endar de"asiado priilegiar eclusia"ente la ersi!n 3 del protocolo#
conclusión (os co"andos b%sicos de SNMP son bastante si"ples una e& 'ue co"prende c!"o "anipular los par%"etros 'ue utili&an# $sta pri"era parte de la iniciaci!n de SNMP debera aberle dado5
:na co"prensi!n global del protocolo :na buena idea sobre c!"o acceder * "anipular la in+or"aci!n M89, con co"andos del siste"a
(a segunda parte de este tutorial sobre SNMP * P*SNMP est% dedicada al descubri"iento de P*SNMP5
8nstalar P*SNMP Sepa c!"o "anipular los co"ponentes b%sicos )K8?, 7o"unidades, :suarios, 7ontetos, ### $ecutar consultas G$ / G$N$R / S$
(a tercera parte de este tutorial lo llear% "%s leos en el uso de P*SNMP para ensearle c!"o leer tablas de datos # >inal"ente, la cuarta parte le ensear% c!"o crear un agente usando un M89 personali&ado#
Introducción a SNMP con Python: PySNMP (Parte 0) - 2so de la %i%lioteca Por Gaël Pegliasco - publicado el 03/03/2016, publicado en 2E/04/2016# SNMP es un protocolo de superisi!n de red uniersal"ente popular# $ste es el est%ndar utili&ado por casi todos los e'uipos de red# (e per"ite "onitorear )consultar * "odi+icar todo tipo de ard.are, desde el enrutador asta la i"presora, e incluso algunas ca+eteras conectadas# $sta segunda parte del tutorial te presenta la biblioteca P*SNMP
introducción $ste tutorial le propone descubrir la biblioteca de P*ton P*SNMP 'ue per"ite dialogar con cual'uier "aterial co"patible con el protocolo del "is"o no"bre# $n esta segunda parte, presentare"os el uso del protocolo SNMP a tras de la biblioteca P*SNMP # Puede co"en&ar a aprender directa"ente de esta segunda parte si *a conoce el protocolo SNMP# Sin e"bargo, si es nueo en este protocolo, le reco"enda"os 'ue lea de ante"ano la pri"era parte de este tutorial 'ue le presentar% el protocolo SNMP , sus cualidades * de+ectos * le proporcionar% las erra"ientas b%sicas para co"en&ar a usarlo * usted propiedad# Sin este conoci"iento preli"inar, este segundo captulo puede parecer "u* di+cil de entender# l +inal de esta segunda parte, nor"al"ente podr%5
Para "anipular los ele"entos K8? b%sicos, co"unidades, cuentas de usuario, contetos, ### Para usar tus propios M89
$ecute consultas G$ / G$N$R / S$ * si"ule F(s
7ree sondeos para erra"ientas de superisi!n co"o Nagios , 7entreon * otros#
plan
Presentaci!n del protocolo o SNMP o
M89
o
SN1
o
(as solicitudes
p*sn"p o
(as solicitudes
o
(as tablas
o
:sa tus M89 con un agente
pysnmp ora 'ue e"os introducido el protocolo SNMP * algunos co"andos para usarlo, +inal"ente pode"os pasar al te"a real de este tutorial5 Tla biblioteca P*SNMPU P*SNMP es una biblioteca de P*ton 'ue i"ple"enta todas las ersiones del protocolo SNMP por co"pleto en P*ton# Sus principales caractersticas son5
7o"pleto5 i"ple"enta todo el protocolo SNMP )1 a 3 co"pleta"ente en P*ton 9astante ligero, alrededor de 1E000 lneas de c!digo
(o su+iciente"ente si"ple para cosas si"ples
"plia"ente utili&ado en la co"unidad5 30,000 descargas por "es en P*pi
Mu*
Instalando PySNMP
(a instalaci!n de la biblioteca es si"ple, es P*ton5 @ pip install pysnmp
Sin e"bargo, en "%'uinas con Findo.s, el co"ando pip general"ente +allar% en la instalaci!n de p*cr*pto 'ue pip 'uiere co"pilar# Pero estos
7on P*SNMP podr% "anipular datos en +or"ato SN#1 *a 'ue es el utili&ado por el protocolo SNMP# (a biblioteca P*SNMP se basa en otra biblioteca5 p*asn1 para lograr esto# (a conersi!n de tipos SN#1 a p*ton es casi natural5 +e pyasn=type%ni2 i.port K a 6 Entero ( != # K ! i.pri.ir ( a # a 6 Entero ( 9 = # L Entero ( = # i.pri.ir ( a # a 6 int ( Entero (
"omandos %>sicos
P*SNMP o+rece arias +unciones de bao niel para usar el protocolo SNMP, pero se reco"ienda utili&ar el "!dulo lapi 'ue signi+ica P8 de alto niel# $ste
'ue "uestra
M&%l$.+M 1 Mget$.+M 1 Mne,t$.+M 1 Mset$.+M Q Ay%+a so&re la f%nci/n get$.+ en pysn.p 3lapi 5 pysn.p 3lapi get$.+ 6 get$.+ ( sn.pEngine 1 a%t3Data 1 transportTarget 1 conte,tData 1 K 2arBin+s 1 KK opciones # $rea %n genera+or para realiar %na o .Rs cons%ltas SN:P ;ET
ntes de usar estos co"andos, aprendere"os c!"o "anipular los par%"etros 'ue necesitan5
(os K8? 'ue desea"os consultar / "odi+icar $le"entos de conei!n de co"unidad para el protocolo 2 o el usuario para el protocolo 3
###
I+S
(os K8? son los identi+icadores de la in+or"aci!n descrita en las M89# :n K8? indica la ruta a seguir en el %rbol M89 para encontrar la in+or"aci!nL #1#2#3#0 podra entenderse co"o5
# 7o"en&ando desde la pla&a central, arias calles te "iran# 1 o"a el pri"ero desde la i&'uierda (legas a un lugar nueo# 2 Jarias calles te en+rentan nuea"ente# o"a el segundo a tu i&'uierda# (legas a un lugar nueo# 3 Jarias calles te en+rentan nuea"ente# o"a el tercero a tu i&'uierda# (legas a un lugar nueo# 0 @a* una placa en el cuadro, contiene tu in+or"aci!n# Si eni! un G$ lo le*!, si eni! un S$ lo ca"bia#
$amino en el MI%
:n K8? est% representado por una secuencia de alores nu"ricos o por una serie de no"bres 'ue designan cada ra"a atraesada en el M89# Si desea obtener "%s in+or"aci!n sobre estos K8?, lo inito a leer la documentaci&n de PySNMP sobre este tema .
Para crear un K8? con P*SNMP, es necesario crear una instancia de la clase Kbect8dentit* :n K8? se puede de+inir5
Por una cadena de caracteres Por una tupla
Por su redacci!n
$stas 4 instancias a continuaci!n de+inen el "is"o obeto o 6 O&GectI+entity ( M=>=!==>0M # o 6 O&GectI+entity (( = 1 > 1 1 = 1 ! 1 = 1 = 1 > 1 0 ## o 6 O&GectI+entity ( MSN:P2!9:IBM 1 Msys*pTi.eM 1 0 # o 6 O&GectI+entity ( Misoorg+o+internet.g.t.i&9 !syste.sys*pTi.e0M #
Parece si"ple, pero para usar los proble"as co"ien&a5 +e la i.portaci/n pysn.p3lapi K o 6 O&GectI+entity ( M=>=!==>0M # i.pri.ir ( o getHa&el (## i.pri.ir ( o get:i&No+e (## i.pri.ir ( o get:i&Sy.&ol (## i.pri.ir ( o getOi+ (## i.pri.ir ( o prettyPrint (## Seguimiento !"tima ""ama#a m$s %eciente&:
Arc3i2o ) U oi+?e,a.plepy)1 lFnea <1 en ./+%lo i.presi/n (ogetHa&el (## Arc3i2o ) U site9pacages U pysn.p U s.i U rfc=0!py)1 lFnea ="1 en getHa&el ele2ar S.iError (MV s no co.pleta.ente inicialia+oMV self ?? class ???? na.e??# pysn.ps.ierrorS.iError5 el o&Geto O&GectI+entity no se 3a inicialia+o por co.pleto
Pero Bpor 'u este errorC (os ee"plos de la docu"entaci!n de P*SNMP son bastante torpes a este respecto5 +es+e pysn.p3lapi i.port K , 6 O&GectType ( O&GectI+entity ( MSN:P2!9:IBM 1 MsysDescrM 1 0 #1 MHin%, i> &o,M ## W lla.an+o a la &s-%e+a :IB , 0 Q prettyPrint (#
$s necesario buscar real"ente este K8? en la M89, no es auto"%tico por'ue a* "ucas M89# P*SNMP iene con todo un arsenal de Mibs, pero tienes 'ue decirle d!nde encontrarlos# ?@ para esa documentación es muy desa#ortunado por$ue nunca muestra un e'emplo realA
:sted tiene el dereco de "olestarL :na e& 'ue sus nerios se a*an cal"ado, recuerde 'ue es un producto KpenSource * 'ue tiene la suerte de tener acceso al c!digo# $l co"ando a*uda de P*ton "uestra 'ue a* un "todo resoleFitMib# $ste "todo to"a co"o par%"etro un obeto MibJie.7ontroller# (a +unci!n de este controlador es resoler el e"parea"iento K8? / M89#
(a docu"entaci!n de la clase MibJie.7ontroller es casi ineistente# $sta clase to"a un obeto Mib9uilder co"o argu"ento cuando se crea# $ntonces tienes 'ue ir a er la clase Mib9uilder Pero una pe'uea b=!==>0M # i.pri.ir ( o getHa&el (## i.pri.ir ( o get:i&No+e (## i.pri.ir ( o get:i&Sy.&ol (## i.pri.ir ( o getOi+ (## i.pri.ir ( o prettyPrint (##
Por desgracia, todaa no esta"os all ### Seg%i.iento (lti.a lla.a+a .Rs reciente#5 Arc3i2o ) U PySN:P U oi+?e,a.plepy)1 lFnea C1 en ./+%lo oresol2eit3:i& ($:# Arc3i2o ) U site9pacages U pysn.p U s.i U rfc=0!py)1 lFnea >""1 en resol2eit3:i& a++:i&$o.piler (.i&ie4$ontroller.i&B%il+er1 Attri&%teError5 el o&Geto MNoneTypeM no tiene ningn atri&%to M.i&B%il+erM
$l controlador de ista "ib no est% de+inido por'ue no e"os creado un :ser7ontet# (a soluci!n "%s si"ple es, en =!==>0M # o resol2eit3:i& ( .2c #
i.pri.ir i.pri.ir i.pri.ir i.pri.ir i.pri.ir
( ( ( ( (
o o o o o
getHa&el (## get:i&No+e (## get:i&Sy.&ol (## getOi+ (## prettyPrint (##
TA eso es todoU (MisoM1 MorgM1 M+o+M1 MinternetM1 M.g.tM1 M.i&9!M1 Msiste.aM1 Msys*pTi.eM# :i&Scalar ((=1 >1 1 =1 !1 =1 =1 >#1 Ti.eTics (## (MSN:P2!9:IBM1 Msys*pTi.eM1 (O&GectNa.e (M0M#1## =>=!==>0 SN:P2!9:IB 55 sys*pTi.e
$l controlador M89 utili&a el M89 P*SNMP generador predeter"inado 'ue al"acena las ersiones p*toni&ed de M89S en la subcarpeta de instalaci!n p*sn"p5 p*sn"p / s"i / "ibs /# No dude en ecar un ista&o# 9ra%a'a con tu propia MI&
Para M89 est%ndar, sabes c!"o acerlo# Pero dir%s5 S, pero trabao con M89 patentadas por'ue so* un constructor de ard.are o utili&o un ard.are espec+ico del +abricante * necesitara "i propio M89# No a* proble"a, los K8? pueden acerlo por usted# Suponga"os 'ue tiene su propia M89, co"o la de abao, 'ue a sido to"ada de este tutorial 5 :AINA?:IB DEINI$IONES 55 6 BE;IN I:PO'TA$IONES OBJETO DE TIPO1 Integer>!1 NOTII$A$IN9TIPO1 e.presas DESDE SN:P2!9S:I [ :aina$orp%s OBJE$T IDENTIIE' 55 6 7e.presas >8 +ataal%e OBJE$T9TYPE SYNTAX Integer>! :AX9A$$ESS +e solo lect%ra ESTADO act%al DES$'IP$IN )*n conteo +e .%estra +e algo) 55 6 7:aina$orp%s =8 +ataDescription OBJETO DE TIPO SYNTAX O$TET ST'IN; :AX9A$$ESS +e solo lect%ra ESTADO act%al DES$'IP$IN )*na +escripci/n +e algo)
55 6 7:aina$orp%s !8 testTrap NOTII$ATION9TYPE ESTADO act%al DES$'IP$IN )Notificaci/n +e pr%e&a) 55 6 7:aina$orp%s >8 IN
$n general, las M89 de los +abricantes se al"acenan en las e"presas de K8?5 iso# org# dod# 8nternet # priado $"presas )1#3#6#1#4#1 $l sitio del "onitor 8P parece "ostrar 'ue el subnodo #3 es libre, por lo 'ue lo eleg para instalar el Ma;ina M89 anterior, pero podra to"ar un subnodo eistente# :aina$orp%s OBJE$T IDENTIIE' 55 6 7e.presas >8
ora es necesario co"pilar esta M89 con P*SM8 # Nor"al"ente esta biblioteca se instala con P*SNMP, de lo contrario eecuta pip install p*s"i# P*SNMP iene con arios scripts, incluido build-p*sn"p-"ib 'ue nos ar% esta conersi!n5 @ &%il+9pysn.p9.i& 9o :AINA?:IBpy :AINA?:IB
$sto generar% un arcio M8NVM89#p* 'ue contiene el c!digo de P*ton 'ue i"ple"enta esta M89# Sin e"bargo, desde la ersi!n 4#3 de P*SNMP, el script build-p*sn"p-"ib se a 'uedado obsoleto * *a no se entrega# Para co"pilar su M89, debe utili&ar el script "ibdu"p#p*, 'ue general"ente se instala en la carpeta / usr / local / bin @ pat+tomibdump.pypat+to 34I#35I& W %se . :AINA?:IB si estR en el repositorio correcto para e2itar el error .i& no encontra+o 'epositorios :IB +e origen5 6ile' pat+ to 34I#35I& 1 file5 UUU %sr U s3are U sn.p U .i&s1 3ttp5UU.i&ssn.pla&sco.Uasn=U.i& Pe+ir presta+as :IB falla+as U falli+as +e5 3ttp5UU.i&ssn.pla&sco.Upysn.pUnote,tsU.i& *&icaciones +e :IB e,istentes U co.pila+as5 pysn.ps.i.i&s1 pysn.p?.i&s El +irectorio +e +estino :IB co.pila+o5 U +ome 7usuario8 .pysnmp mibs :IB crea+as U act%alia+as5 34I#35I& :IB preco.pila+os presta+os5 :IB act%alia+os5 SN:P2!9$ON1 SN:P2!9S:I1 SN:P2!9T$ :IB f%ente faltante5 :IB ignora+as5 :IB falli+as5
>inal"ente, para construir un K8? utili&ando este
o o o o
6 O&GectI+entity (( = 1 > 1 1 = 1 < 1 = 1 > 1 = ## a++:i&So%rce ( MU pat3 U to U .aina?.i& U +ot U py U 6older M # loa+:i&s ( ):AINA?:IB) # resol2eit3:i& ( .2c #
i.pri.ir ( o getHa&el (## i.pri.ir ( o get:i&No+e (## i.pri.ir ( o get:i&Sy.&ol (## i.pri.ir ( o getOi+ (## i.pri.ir ( o prettyPrint (## (MisoM1 MorgM1 M+o+M1 MinternetM1 Mpri2a+oM1 Me.presasM1 M:aina$orp%sM1 M+ataal%eM# :i&Scalar ((=1 >1 1 =1 <1 =1 >1 =#1 Integer>! (## (M:AINA?:IBM1 M+ataal%eM1 (## =>=<=>= :AINA?:IB 55 Dataal%e
Jere"os al eecutar los co"andos b%sicos 'ue ta"bin pode"os especi+icar directa"ente la +uente SN#1 en lugar de co"pilar la M89# ?esde la ersi!n 4#3, P*SNMP puede acerlo auto"%tica"ente en algunos casos#
tros art4culos antes de comen*ar (os co"andos G$, S$ * 9:( de la biblioteca P*SNMP re'uieren arios par%"etros5
$l "otor SNMP para usar 7on+iguraci!n de autenticaci!n, co"unidad o usuario
$l tipo de transporte utili&ado ):?P, 8P4 o 8P6 * el puerto )161 por de+ecto
$l conteto de eecuci!n
A las ariables a "anear )los K8?
El motor SNMP
P*SNMP per"ite el di%logo con todos los co"ponentes SNMP a tras de un obeto Motor SNMP# Su descripci!n co"pleta est% disponible en la docu"entaci!n o+icial# Mu* a "enudo solo necesitas instanciarlo# +e la i.portaci/n pysn.p3lapi K se 6 Sn.pEngine (#
"on#iuración de autenticación
$ste par%"etro es5
:na co"unidad para protocolos 1 * 2
:n usuario )con los E par%"etros de inicio de sesi!n, contrasea, contrasea de algorit"o de ci+rado, co"unicaci!n de ci+rado de sal, co"unicaci!n de algorit"o de ci+rado en el caso del protocolo 3
(a co"unidad es proporcionada por la clase 7o""unit*?ata +e la i.portaci/n pysn.p3lapi K c2= 6 $o..%nityData ( Mp%&licM 1 .p:o+el 6 0 # W SN:P2= c2! 6 $o..%nityData ( Mp%&licM 1 .p:o+el 6 = # W SN:P2!c
(os usuarios utili&ados para las coneiones a tras del protocolo 3 se deben instanciar a tras de la clase :s":ser?ata 'ue acepta E par%"etros5
no"bre de usuario5 inicio de sesi!n de usuario aute*5 contrasea autProtocol5 protocolo para encriptar la contrasea :na tupla 'ue indica la ruta en la M89 'ue de+ine el protocolo# $n iso org# dod# 8nternet # sn"pJ2# sn"pModules# sn"p>ra"e.or;M89# sn"pra"e.or;d"in# Sn"putProtocols O Por de+ecto usmBM="M+C=uthProtocol D
pri3ey: la cla3e F la sal para el aloritmo de encriptación pri3Protocol: el aloritmo de ci#rado 2na tupla $ue indica $ue la ruta en la MI& $ue de#ine este aloritmo est> %a'o iso or dod Internet snmpG0 snmpModules snmpHrameor7MI& snmpHrameor7=dmin snmpPri3Protocols < o en otro luar PySNMP o#rece / aloritmos: o
usmNoPri3Protocol< predeterminado si no hay una cla3e asociada
o
us"?$SPriProtocol, alor predeter"inado si no se especi+ica * clae asociada
o
us"3?$S$?$PriProtocol
o
us"es7+b12IProtocol
o
us"es7+b1H2Protocol
o
us"es7+b2E6Protocol
$e"plo5 % 6 *s.*serData ( M%serloginM 1 a%t3ey 6 Ma%t3enticationeyM 1 pri2ey 6 MencryptioneyM 1 pri2Protocol 6 %s.Aes$f&!"Protocol # i.pri.ir ( % #
*s.*serData (%serNa.e 6 M%serloginM1 a%t3ey 6 A*TEY1 pri2ey 6 P'IEY1 a%t3Protocol 6 (=1 >1 1 =1 1 >1 =01 =1 =1 !#1 pri2Protocol 6 (=1 >1 1 =1 <1 =1 1 =!1 1 =1 !#1 sec%rityEngineI+ 6 MDEA*HTM1 sec%rityNa.e 6 M%serloginM#
9ipos de transporte
:?P en 8P4 o 8P65 Por lo tanto, ser% una instancia de uno de estos 2 tipos de transporte5
:dpransportarget :dp6ransportarget
$stas 2 clases aceptan arios argu"entos5
$l pri"ero es una parea )direcci!n 8P, puerto# (a direcci!n es una cadena de caracteres, no"bre de ost o direcci!n 8P# :se un entero# (as direcciones 8P6 deben cu"plir con =>7 1H24 W section-3 un tie"po de espera, epresado en segundos, por de+ecto
un n<"ero "%i"o para reintentar, predeter"inado
una lista de eti'uetas, de acuerdo con =>7 3413 W section-4#1#4
$e"plo5 t= 6 *+pTransportTarget (( M+e.osn.pla&sco.M 1 == ## t! 6 *+pTransportTarget (( Mgoogleco.M 1 == ## i.pri.ir ( t= # i.pri.ir ( t! # *+pTransportTarget ((M="!=="!!M1 ==#1 ti.eo%t 6 =1 retries 6 "1 tagHist 6 & MM# *+pTransportTarget ((M!a005 =<"05 <00C5 0e 55 !00t3M1 ==#1 ti.eo%t 6 =1 retries 6 "1 tagHist 6 & MM#
"onte6tos
$stos son contetos SNMP tal co"o se de+ine en =>7 3411# W 3#3#1 7on SNMP1, un agente solo podra "anear un M89# Pero o* en da, algunos dispositios pueden "anear "
cepta 2 par%"etros5
7ontet$ngine8d K el contetNa"e
I+ y %'ect9ype
7ubri"os los K8? en un captulo anterior# Sin e"bargo, cuando ena un co"ando a tras de la biblioteca SNMP, lo ace a tras de la clase Kbect*pe # $l obeto est%ndar encapsula el K8? * su alor real )en el caso de un co"ando S$ o deuele un G$# 7o"o parte de un G$, usted solo especi+ica el K8? cuando crea la instancia Kbect*pe, pero a ca"bio tendr% un Kbect*pe con el "is"o K8? * su alor# ot 6 O&GectType ( O&GectI+entity ( MSN:P2!9:IBM 1 MsysDescrM #1 MHin%, i> &o,M # ot resol2eit3:i& ( .2c # i.pri.ir ( ot # SN:P2!9:IB 55 sysDescr 6 Hin%, i> &o,
El comando &9ENE8 ora 'ue e"os reisado todos los ele"entos necesarios para la lla"ada de pedidos, >8N(M$N$ podre"os escribir nuestro pri"er co"ando G$ Para eniar un "ensae K9$N$=, use la +unci!n get7"d enu"erada anterior"ente# >inal"ente, cuando eecuta este co"ando puede solicitar "
t%ans'o%t)a%get 1
$sta +unci!n deuele una tupla de 4 ele"entos5
error8ndication5 :n alor considerado rue si se produo un error en el "otor errorStatus5 alor considerado erdadero para un error de P?:
error8nde5 el ndice de la ariable 'ue caus! el error )co"ien&a en 0
ar9inds5 una tupla 'ue contiene los alores deueltos por el co"ando en instancias de la clase Kbect*pe
K el siguiente co"ando5 @ sn.pget 92= 9c p%&lic +e.osn.pla&sco. sysHocation0 sysDescr0
Se puede eecutar a tras del siguiente c!digo de P*ton5
+e la i.portaci/n pysn.p3lapi K +ata 6 ( O&GectType ( O&GectI+entity ( MSN:P2!9:IBM 1 MsysHocationM 1 0 ##1 O&GectType ( O&GectI+entity ( MSN:P2!9:IBM 1 MsysDescrM 1 0 ## # g 6 get$.+ ( 1 1 1 1
Sn.pEngine (# $o..%nityData ( Mp%&licM 1 .p:o+el 6 0 # *+pTransportTarget (( M+e.osn.pla&sco.M 1 == ## $onte,tData (# K +atos #
errorIn+ication 1 errorStat%s 1 errorIn+e, 1 2arBin+s 6 ne,t ( g # if errorIn+ication 5 print ( errorIn+ication # elif errorStat%s 5 print ( M V s en V s M V ( errorStat%s prettyPrint (#1 errorIn+e, y 2arBin+s int ( errorIn+e, # 9 = Q 0 Q o M\M # # else 5 para 2arBin+ en 2arBin+s 5 print ( M6M Goin ( , prettyPrint (# para , en 2arBin+ Q## SN:P2!9:IB 55 sysHocation0 6 :osc1 '%sia SN:P2!9:IB 55 sysDescr0 6 S%nOS e%ssn.pla&sco. <=>?*= = s%n<.
Para eecutarlo con el protocolo 2c, si"ple"ente ca"bie el alor del par%"etro "pModel Q 1 en el obeto de la co"unidad# Para eecutarlo con el protocolo 3, ree"place la instancia 7o""unit*?ata con una instancia :s":ser?ata# (a lista de co"unidades * usuarios disponibles en el sitio de"o#sn"plabs#co" est% disponible en esta :=( # $e"plo de usuario )usr-sa-des / S@ / aut;e*1 / ?$S / pri;e*15 *s.*serData ( )%sr9s3a9+es) 1 a%t3Protocol 6 %s.:A$SAA%t3Protocol 1 a%t3ey 6 )a%t3ey=) 1 pri2Protocol 6 %s.DESPri2Protocol 1 pri2ey 6 )pri2ey=) #
El comando 5etNEJ9 $l co"ando GetN$R se eecuta eacta"ente co"o un co"ando get, con los "is"os par%"etros# =ecupera el ele"ento 'ue sigue al K8? pasado co"o argu"ento#
+e la i.portaci/n pysn.p3lapi K g 6 ne,t$.+ ( Sn.pEngine (# 1 $o..%nityData ( Mp%&licM 1 .p:o+el 6 = # 1 *+pTransportTarget (( M+e.osn.pla&sco.M 1 == ## 1 $onte,tData (# 1 O&GectType ( O&GectI+entity ( MSN:P2!9:IBM 1 MsysO&GectIDM 1 0 ### errorIn+ication 1 errorStat%s 1 errorIn+e, 1 2arBin+s 6 ne,t ( g # if errorIn+ication 5 print ( errorIn+ication # elif errorStat%s 5 print ( M V s en V s M V ( errorStat%s prettyPrint (# 1 errorIn+e, y 2arBin+s int ( errorIn+e, # 9 = Q 0 Q o M\M # # else 5 para 2arBin+ en 2arBin+s 5 print ( M6M Goin ( , prettyPrint (# para , en 2arBin+ Q## SN:P2!9:IB 55 sys*pTi.e0 6 !0=0!
7o"o abr%s notado, el co"ando deuele un generador# $ntonces puede deoler la lla"ada con la +unci!n siguiente para obtener el siguiente artculo# $sto le per"ite baar un M89 co"pleto "odi+icando el c!digo anterior, una e& 'ue la ariable g crea una instancia# +e la i.portaci/n pysn.p3lapi K g 6 ne,t$.+ ( 1 1 1 1 1 0 ###
Sn.pEngine (# $o..%nityData ( Mp%&licM 1 .p:o+el 6 = # *+pTransportTarget (( M+e.osn.pla&sco.M 1 == ## $onte,tData (# O&GectType ( O&GectI+entity ( MSN:P2!9:IBM 1 MsysO&GectIDM
para errorIn+ication 1 errorStat%s 1 errorIn+e, 1 2arBin+s en g 5 if errorIn+ication 5 print ( errorIn+ication # elif errorStat%s 5 print ( M V s en V s M V ( errorStat%s prettyPrint (#1 errorIn+e, y 2arBin+s int ( errorIn+e, # 9 = Q 0 Q o M\M # # else 5 para 2arBin+ en 2arBin+s 5 print ( M6M Goin ( , prettyPrint (# para , en 2arBin+ Q##
SN:P2!9:IB SN:P2!9:IB SN:P2!9:IB SN:P2!9:IB SN:P2!9:IB SN:P2!9:IB SN:P2!9:IB SN:P2!9:IB SN:P2!9:IB
55 55 55 55 55 55 55 55 55
sys*pTi.e0 6 !0=<0!<= sys$ontact0 6 SN:P Ha&oratories1 infosn.pla&sco. sysNa.e0 6 e%ssn.pla&sco. sysHocation0 6 :osc1 '%sia sysSer2ices0 6 C! sysO'Hast$3ange0 6 !0=<0><> sysO'ID= 6 PYSN:P9:IB 55 pysn.pO&Gects= sysO'Descr= 6 co.entario n%e2o sysO'*pTi.e= 6 =!>
El comando SE9 $l co"ando S$ se eecuta eacta"ente co"o un co"ando get, con los "is"os par%"etros# $cepto 'ue el Kbect*pe contiene un segundo argu"ento5 el nueo alor# +e la i.portaci/n pysn.p3lapi K +ef s3o4?ite. ( #5 g 6 get$.+ ( Sn.pEngine (# 1 $o..%nityData ( Mp%&licM 1 .p:o+el 6 = # 1 *+pTransportTarget (( M+e.osn.pla&sco.M 1 == ## 1 $onte,tData (# 1 O&GectType ( O&GectI+entity ( MSN:P2!9:IBM 1 MsysO'DescrM 1 = ### errorIn+ication 1 errorStat%s 1 errorIn+e, 1 2arBin+s 6 ne,t ( g # para 2arBin+ en 2arBin+s 5 print ( M6M Goin ( , prettyPrint (# para , en 2arBin+ Q## W :ostrar 2alor inicial s3o4?ite. (# W Esta&lecer n%e2o 2alor g 6 set$.+ ( Sn.pEngine (# 1 *s.*serData ( )%sr9s3a9+es) 1 a%t3Protocol 6 %s.:A$SAA%t3Protocol 1 a%t3ey 6 )a%t3ey=) 1 pri2Protocol 6 %s.DESPri2Protocol 1 pri2ey 6 )pri2ey=) # 1 *+pTransportTarget (( M+e.osn.pla&sco.M 1 == ## 1 $onte,tData (# 1 O&GectType ( O&GectI+entity ( MSN:P2!9:IBM 1 MsysO'DescrM 1 = #1 Mola +es+e Hannion %san+o el procesa+or alray en Hin%,M ## errorIn+ication 1 errorStat%s 1 errorIn+e, 1 2arBin+s 6 ne,t ( g # print ( errorIn+ication 1 2arBin+s # s3o4?ite. (#
SN:P2!9:IB 55 sysO'Descr= 6 A-%F estR .i n%e2a nota SN:P2!9:IB 55 sysO'Descr= 6 ola +es+e Hannion %san+o el procesa+or alray en Hin%,
conclusión (os co"andos b%sicos de SNMP se usan con bastante +acilidad una e& 'ue co"prende c!"o con+igurar los di+erentes par%"etros 'ue re'uieren# $sta segunda parte de la iniciaci!n de SNMP * P*SNMP debera aberle dado5
:na co"prensi!n global de los ele"entos b%sicos de la biblioteca P*SNMP 7!"o conertir sus M89 SN#1 a c!digo P*ton para P*SNMP
Maneras de construir sondas para su so+t.are de "onitoreo
odaa tene"os 'ue er algunos ele"entos "%s aan&ados co"o5
Introducción a SNMP con Python: PySNMP (Parte .) - 9a%las Por Gaël Pegliasco - publicado el 0/04/2016, publicado el 22/04/2016 SNMP es un protocolo de superisi!n de red uniersal"ente popular# $ste es el est%ndar utili&ado por casi todos los e'uipos de red# (e per"ite "onitorear )consultar * "odi+icar todos los tipos de ard.are, desde el enrutador asta la i"presora, e incluso algunas ca+eteras conectadas# $sta tercera parte del tutorial le "uestra c!"o ad"inistrar los datos de la tabla#
introducción $ste tutorial le propone descubrir la biblioteca de P*ton P*SNMP 'ue per"ite dialogar con cual'uier "aterial co"patible con el protocolo del "is"o no"bre#
$n esta tercera parte, le presenta"os c!"o consultar datos de tipo tabla desde la lnea de co"ando * con la biblioteca P*SNMP # Si no conoce el protocolo SNMP, lo inita"os a leer la pri"era parte de este tutorial 'ue le presentar% el protocolo SNMP , sus cualidades * de+ectos, * le proporcionar% las erra"ientas b%sicas para co"en&ar a usarlo * 'uit%rselo# Sin este conoci"iento preli"inar, este tercer captulo puede parecer "u* di+cil de entender# Si nunca a utili&ado la biblioteca P*SNMP, ta"bin lo inita"os a leer la segunda parte de este tutorial 'ue le brindar% los conceptos b%sicos para usar el protocolo SNMP en P*ton # l +inal de esta tercera parte, nor"al"ente podr%5
7onsultar tablas de datos en la lnea de co"ando (ee tablas de datos SNMP con P*ton
,as ta%las Parte de la in+or"aci!n de M89 se proporciona en +or"a de tabla# Por ee"plo, las inter+aces de red de un seridor )et0, .lan0, loopbac;# $stas tablas est%n organi&adas co"o registros# 7ada registro o +ila en la tabla contiene arias pie&as de in+or"aci!n# $stos registros son accesibles indiidual"ente a tras de su ndice# o"e el ee"plo de la entrada i+able , cu*o K8? es5
iso org# dod# 8nternet # "g"t# "ib-2# inter+aces# i+able 1#3#6#1#2#1#2#2
Su de+inici!n de SN#1 es5 9 Has interfaces +e ta&la 9 Ha ta&la +e Interfaces contiene infor.aci/n so&re la enti+a+ 9 interfaces $a+a s%&capa +e&aGo +e la capa +e internet4or 9 +e %na interfa +e re+ se consi+era %na interfa ifTa&le OBJETO DE TIPO SINTAXIS SE$*EN$IA DE IfEntry :AX9A$$ESS no accesi&le ESTADO act%al DES$'IP$IN Ha lista +e entra+as 2iene +a+o por el 2alor +e ifN%.&er ) 55 6 7interfaces !8 ifEntry OBJETO DE TIPO SYNTAX IfEntry :AX9A$$ESS no accesi&le ESTADO act%al
DES$'IP$IN )*na entra+a -%e contiene infor.aci/n +e gesti/n aplica&le a %na interfa partic%lar ) ]NDI$E 7ifIn+e,8 55 6 7ifTa&le =8 IfEntry 55 6 SE$*EN$IA 7 ifIn+e, InterfaceIn+e,1 ifDescr DisplayString1 ifType IANAifType1 if:t% Integer>!1 ifSpee+ ;a%ge>!1 ifP3ysA++ress P3ysA++ress1 ifA+.inStat%s INTE;E'1 ifOperStat%s INTE;E'1 ifHast$3ange Ti.eTics1 ifInOctets $o%nter>!1 ifIn*castPts $o%nter>!1 ifInN*castPts $o%nter>!1 9 o&soleto ifInDiscar+s $o%nter>!1 ifInErrors $o%nter>!1 ifIn*nno4nProtos $o%nter>!1 ifO%tOctets $o%nter>!1 ifO%t*castPts $o%nter>!1 ifO%tN*castPts $o%nter>!1 9 o&soleto ifO%tDiscar+s $o%nter>!1 ifO%tErrors $o%nter>!1 ifO%t^Hen ;a%ge>!1 9 o&soleto ifSpecific OBJE$T IDENTIIE' 9 o&soleto 8
Se lee 'ue el ele"ento i+able es una secuencia de ele"entos i+$ntr* * 'ue cada ele"ento i+$ntr* est% indeado por un ele"ento i+8nde# >inal"ente, i+$ntr* en s es una secuencia de "ucos ele"entos co"o i+?escr, i+*pe, i+Speed, etc# $n otras palabras, i+able es una "atri& de lneas de tipo i+$ntr* con "
=epresentaci!n de la tabla i+able, +uente etutorials#org
Pode"os er esto "%s de cerca con el co"ando SNMPF(5 $ snmpal! -v2c -c public demo.snmplabs.com i6Table I9:IB 55 ifIn+e,= 6 INTE;E'5 = I9:IB 55 ifIn+e,! 6 INTE;E'5 ! I9:IB 55 ifDescr= 6 ST'IN;5 et30 I9:IB 55 ifDescr! 6 ST'IN;5 et3= I9:IB 55 ifType= 6 INTE;E'5 et3ernet$s.ac+ (# I9:IB 55 ifType! 6 INTE;E'5 et3ernet$s.ac+ (# I9:IB 55 if:t%= 6 INTE;E'5 ="00 I9:IB 55 if:t%! 6 INTE;E'5 ="00 I9:IB 55 ifSpee+= 6 ;a%ge>!5 =00000000 I9:IB 55 ifSpee+! 6 ;a%ge>!5 =00000000 I9:IB 55 ifP3ysA++ress= 6 $ADENA5 05 =!5 C5 !5 f5 <0 I9:IB 55 ifP3ysA++ress! 6 $ADENA5 05 =!5 C5 !5 f5 <= I9:IB 55 ifA+.inStat%s= 6 INTE;E'5 arri&a (=# I9:IB 55 ifA+.inStat%s! 6 INTE;E'5 arri&a (=# I9:IB 55 ifOperStat%s= 6 INTE;E'5 arri&a (=#
$s posible encontrar los di+erentes registros de la tabla gracias al ndice i+8nde de las entradas i+$ntr*# 'u tene"os 2 alores para el ndice5 1 * 2, por lo tanto, 2 registros# Por lo tanto, cada colu"na del registro i+$ntr* estar% asociada a su ndice5
8+?escr#1 * i+*pe#1 para el pri"er registro# 8+?escr#2 * i+*pe#2 para el segundo, * as sucesia"ente#
?e este "odo, es posible reconstituir todas las grabaciones "ediante el co"ando sn"p.al; * los alores de los ndices# Pero es laborioso# $l co"ando sn"ptable ace esto auto"%tica"ente para usted5 $ snmptable -v2c -c public demo.snmplabs.com i6Table Ta&la SN:P5 I9:IB 55 ifTa&le
ifIn+e, ifDescr ifType if:t% ifSpee+ ifP3ysA++ress = et30 et3ernet$sc.ac ="00 =00000000 05 =!5 C5 !5 f5 <0 ! et3= et3ernet$s.ac+ ="00 =00000000 05 =!5 C5 !5 f5 <=
$sto puede ser co"plicado cuando una entrada de tabla es indeada por "
9a%las con PySNMP P*SNMP no o+rece un e'uialente al co"ando sn"ptable para leer una tabla# Pero puede acerlo de "anera "u* si"ple con el co"ando net7"d si lo con+igura correcta"ente#
ntes de er c!"o acer esta lectura con buenas pr%cticas, tratare"os de eplorar los di+erentes ele"entos de la M89 8nter+a& K8? )8>-M89, i+able de +or"a "anual * deolere"os una lista de diccionarios, cada uno con los alores de cada uno# colu"nas del nodo i+$ntr*# $sto nos per"itir% co"prender "eor la "ec%nica utili&ada por P*SNMP * nos ensear% a "anipular las sucesias iteraciones de net7"d# :na e& 'ue i"ple"enta"os una soluci!n +uncional, pode"os aplicar algunas con+iguraciones adicionales para si"pli+icar la creaci!n de nuestra lista de registros# :sando el siguiente co"ando ere"os todos los ele"entos de la entrada )8>-M89, i+able5 g 6 ne,t$.+ ( Sn.pEngine (# 1 $o..%nityData ( Mp%&licM 1 .p:o+el 6 = # 1 *+pTransportTarget (( M+e.osn.pla&sco.M 1 == # 1 $onte,tData (# 1 O&GectType ( O&GectI+entity ( MI9:IBM 1 MifTa&leM ## 1 le,icograp3ic:o+e 6 alse #
'u todaa agrega"os la opci!n leicograpi'ueMode Q >alse 'ue le dice al co"ando getNet 'ue no contin
$sto nos dar% un resultado si"ilar a este5
:esa +e ca.inata I9:IB 55 ifIn+e,= 6 = Eti-%eta5 (MisoM1 MorgM1 M+o+M1 MinternetM1 M.g.tM1 M.i&9!M1 MinterfacesM1 MifTa&leM1 MifEntryM1 MifIn+e,M# SF.&olo :i&5 (MI9:IBM1 MifIn+e,M1 (InterfaceIn+e, (=#1## I9:IB 55 ifIn+e,! 6 ! Eti-%eta5 (MisoM1 MorgM1 M+o+M1 MinternetM1 M.g.tM1 M.i&9!M1 MinterfacesM1 MifTa&leM1 MifEntryM1 MifIn+e,M# SF.&olo :i&5 (MI9:IBM1 MifIn+e,M1 (InterfaceIn+e, (!#1## I9:IB 55 ifDescr= 6 et30 Eti-%eta5 (MisoM1 MorgM1 M+o+M1 MinternetM1 M.g.tM1 M.i&9!M1 MinterfacesM1 MifTa&leM1 MifEntryM1 MifDescrM# SF.&olo :i&5 (MI9:IBM1 MifDescrM1 (InterfaceIn+e, (=#1## I9:IB 55 ifDescr! 6 et3=
$ste listado nos "uestra 2 cosas5
$l n<"ero del i+$ntr* al 'ue pertenece cada propiedad iene proporcionado por el
s 'ue pode"os crear una lista de cada ele"ento i+$ntr* en un diccionario, de la siguiente "anera5 ey 6 str ( oi+ get:i&Sy.&ol (# 9 = Q 0 Q# si no es cla2e en +In+e, 5 +In+e, cla2e Q 6 78 +atos appen+ ( +In+e, cla2e Q# +In+e, cla2e Q eti-%eta 9 = QQ 6 str ( 2alor prettyPrint (##
$l c!digo +inal pasa a ser el siguiente5 +e la i.portaci/n pysn.p3lapi K +es+e pysn.ps.i2ie4 i.port :i&ie4$ontroller
se 6 Sn.pEngine (# .2c 6 se get*ser$onte,t ( M.i&ie4$ontrollerM # si no .2c 5 .2c 6 :i&ie4$ontroller ( 2er get:i&B%il+er (## W W W =>=!=!! (MisoM1 MorgM1 M+o+M1 MinternetM1 M.g.tM1 M.i&9!M1 MinterfacesM1 MifTa&leM# oi+?ifta&le 6 O&GectI+entity ( MI9:IBM 1 MifTa&leM # oi+?ifta&le resol2eit3:i& ( .2c # print ( )'oot oi+) # i.pri.ir ( oi+?ifta&le i.pri.ir ( oi+?ifta&le i.pri.ir ( oi+?ifta&le i.pri.ir ( oi+?ifta&le
getOi+ (## getHa&el (## get:i&No+e (## get:i&Sy.&ol (##
g 6 ne,t$.+ ( 1 1 1 1 1
Sn.pEngine (# $o..%nityData ( Mp%&licM 1 .p:o+el 6 = # *+pTransportTarget (( M+e.osn.pla&sco.M 1 == ## $onte,tData (# O&GectType ( O&GectI+entity ( MI9:IBM 1 MifTa&leM ## le,icograp3ic:o+e 6 alse #
i.pri.ir ( ) _ n :esa para ca.inar) # +ata 6 Q +In+e, 6 78 para errorIn+ication 1 errorStat%s 1 errorIn+e, 1 2arBin+s en g 5 if errorIn+ication 5 print ( errorIn+ication # elif errorStat%s 5 print ( M V s en V s M V ( errorStat%s prettyPrint (#1 errorIn+e, y 2arBin+s int ( errorIn+e, # 9 = Q 0 Q o M\M # # else 5 para 2arBin+ en 2arBin+s 5 i.pri.ir ( 2arBin+ # oi+ 6 2arBin+ 0 Q 2al%e 6 2arBin+ = Q la&el 6 oi+ getHa&el (# i.pri.ir ( )Eti-%eta5) 1 eti-%eta # print ( )SF.&olo :i&5) 1 oi+ get:i&Sy.&ol (## ey 6 str ( oi+ get:i&Sy.&ol (# 9 = Q 0 Q# si no es cla2e en +In+e, 5 +In+e, cla2e Q 6 78 +atos appen+ ( +In+e, cla2e Q# +In+e, cla2e Q eti-%eta 9 = QQ 6 str ( 2alor prettyPrint (## i.pri.ir ( ) _ n I.pri.ir ele.entos) # para in+ 1 ele.ento en en%.erate ( +atos #5 print ( )ArtFc%lo V s ) V ( str ( in+ L = #1 ## para la cla2e 1 2alor en el artFc%lo artFc%los (#5 print ( ) V s 5 V s ) V ( cla2e 1 2alor ##
7on el siguiente resultado +inal para los ele"entos i+$ntr*5 I.presi/n +e artFc%los ArtFc%lo = ifO%t*castPts5 ==!CC>0!
ifInErrors5 0 ifIn*castPts5 !!""<"= ifO%tErrors5 0 ifO%tDiscar+s5 0 ifInN*castPts5 !"00< ifType5 Met3ernet$s.ac+M ifSpecific5 SN:P2!9S:I 55 eroDotZero ifSpee+5 =00000000 ifP3ysA++ress5 005 =!5 C5 !5 f5 <0 ifO%tN*castPts5 =!">0>> ifOperStat%s5 M%pM ifIn+e,5 = ifInOctets5 !C"C0" ifDescr5 et30 ifHast$3ange5 ="00>= ifInDiscar+s5 0 ifO%tOctets5 =!">0>>>> ifA+.inStat%s5 Marri&aM ifIn*nno4nProtos5 =!">0= if:t%5 ="00 ifO%t^Hen5 0 ArtFc%lo ! ifO%t*castPts5 ==!CC>0" ifInErrors5 0 ifIn*castPts5 !!""<"> ifO%tErrors5 0 ifO%tDiscar+s5 0 ifInN*castPts5 !"00" ifType5 Met3ernet$s.ac+M ifSpecific5 SN:P2!9S:I 55 eroDotZero ifSpee+5 =00000000 ifP3ysA++ress5 005 =!5 C5 !5 f5 <= ifO%tN*castPts5 =!">0>< ifOperStat%s5 M%pM ifIn+e,5 ! ifInOctets5 !"00<>= ifDescr5 et3= ifHast$3ange5 !<>0>=! ifInDiscar+s5 0 ifO%tOctets5 =!">0>>< ifA+.inStat%s5 Marri&aM ifIn*nno4nProtos5 =!">0< if:t%5 ="00 ifO%t^Hen5 0
$sta tcnica es
*+pTransportTarget (( M+e.osn.pla&sco.M 1 == ##1 $onte,tData (#1 O&GectType ( O&GectI+entity ( MI9:IBM 1 MifDescrM ##1 O&GectType ( O&GectI+entity ( MI9:IBM 1 MifTypeM ##1 O&GectType ( O&GectI+entity ( MI9:IBM 1 Mif:t%M ##1 O&GectType ( O&GectI+entity ( MI9:IBM 1 MifSpee+M ##1 O&GectType ( O&GectI+entity ( MI9:IBM 1 MifTypeM ##1 O&GectType ( O&GectI+entity ( MI9:IBM 1 MifP3ysA++ressM ##1 le,icograp3ic:o+e 6 alse #
Nuestro progra"a se conierte en5 +e la i.portaci/n pysn.p3lapi K ite. 6 0 para errorIn+ication 1 _ errorStat%s 1 _ errorIn+e, 1 _ 2arBin+s en ne,t$.+ ( Sn.pEngine (#1 $o..%nityData ( Mp%&licM 1 .p:o+el 6 0 #1 *+pTransportTarget (( M+e.osn.pla&sco.M 1 == ##1 $onte,tData (#1 O&GectType ( O&GectI+entity ( MI9:IBM 1 MifDescrM ##1 O&GectType ( O&GectI+entity ( MI9:IBM 1 MifTypeM ##1 O&GectType ( O&GectI+entity ( MI9:IBM 1 Mif:t%M ##1 O&GectType ( O&GectI+entity ( MI9:IBM 1 MifSpee+M ##1 O&GectType ( O&GectI+entity ( MI9:IBM 1 MifTypeM ##1 O&GectType ( O&GectI+entity ( MI9:IBM 1 MifP3ysA++ressM ##1 le,icograp3ic:o+e 6 alse #5 i.pri.ir ( )ArtFc%lo) 1 artFc%lo # ite. L 6 =
if errorIn+ication 5 print ( errorIn+ication # pa%sa elif errorStat%s 5 print ( M V s en V s M V ( errorStat%s prettyPrint (#1 errorIn+e, y 2arBin+s int ( errorIn+e, # 9 = Q 0 Q o
M\M # # pa%sa else 5 para 2arBin+ en 2arBin+s 5 print ( M6M Goin ( , prettyPrint (# para , en 2arBin+ Q##