Python + SNMP

631 views
Skip to first unread message

leandro candida da costa

unread,
Oct 27, 2015, 5:44:17 PM10/27/15
to Python Brasil
Boa tarde!

Sou novo no grupo e em  python,  estou o utilizando o seguinte script para que apos consulta via snmp o retorno que é um numero em counter32 seja convertido para decimal.
Script:
import struct
import sys
from pysnmp.entity.rfc3413.oneliner import cmdgen
cmdGen = cmdgen.CommandGenerator()
arg = str(sys.argv[1:]).split("'")
errorIndication, errorStatus, errorIndex, varBinds = cmdGen.getCmd(
    cmdgen.CommunityData('public'),
    cmdgen.UdpTransportTarget((arg[1], 161)),
    arg[3]
)
snmp='\n'.join([ '%s = %s' % varBind for varBind in varBinds]).split(" ")
print "%f" % struct.unpack("f", struct.pack("I", int(snmp[2]) ))


no console:
# python  counter32.py 172.16.0.6 iso.3.6.1.4.1.1166.6.1.2.29.2.1.8
Traceback (most recent call last):
  File "counter32.py", line 30, in <module>
    snmp='\n'.join([ '%s = %s' % varBind for varBind in varBinds]).split(" ")
TypeError: not enough arguments for format string

Alguem pode me ajudar.
Att

Victor Augusto Furtado Leite

unread,
Oct 27, 2015, 6:44:49 PM10/27/15
to python...@googlegroups.com
Leandro, na linha que está dando erro
snmp='\n'.join([ '%s = %s' % varBind for varBind in varBinds]).split(" ")
você diz que a formatação da sua string precisa de dois "parâmetros" (os dois %s), então você tem que passar duas strings após o %.
Tenta assim:
snmp='\n'.join([ '%s = %s' % (varBind, varBind) for varBind in varBinds]).split(" ")
ou você pode usar o método format:
snmp='\n'.join([ '{0} = {0}'.format(varBind) for varBind in varBinds]).split(" ")

E algumas dicas:
 - O split por padrão já usa o " " (espaço) como delimitador, então não é necessário chamar split(" ");
 - Eu não sei o que você quer fazer, mas dá uma olhada aqui, veja a saída do último print porque é assim que sua variável snmp vai ficar. 


[]s



--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@googlegroups.com

---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasi...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.



--
Victor

leandro candida da costa

unread,
Oct 28, 2015, 4:11:50 PM10/28/15
to Python Brasil
Victor, Obrigado pela atenção.
O que eu quero fazer é o seguinte:
uma consulta via snmp aonde o retorno é um numero em counter32 ex:3241148416 quero converter ele para um numero decimal.
Ainda não testei a sua resposta. Vou testar agora e te passo um feedback.
Att

leandro candida da costa

unread,
Oct 28, 2015, 4:21:40 PM10/28/15
to Python Brasil
Victor,
Muito Obrigado funcionou perfeitamente.


Em terça-feira, 27 de outubro de 2015 19:44:17 UTC-2, leandro candida da costa escreveu:

Adinan Paiva

unread,
Oct 28, 2015, 7:49:05 PM10/28/15
to Python Brasil
Pessoal,
Pude notar que o problema do nosso colega foi resolvido, mas fiquei com receio de criar um tópico novo para  tratar digamos que do mesmo assunto.

No meu caso, estou utilizando a lib netsnmp para realizar minhas consultas no dispositivo, porem quando eu faço a requisição utilizando o protocolo v3, meu retorno é uma tupla com um unico valor "None", ja quando eu utilizo o protocolo v2 os valores são retornados corretamente,  o grande problema é que as requisões do projeto exige que eu utilize o snmp na versão 3. Abaixo,  segue o código que "não funciona"

import netsnmp
import os

os
.environ['MIBS'] = "FORTINET-FORTIGATE-MIB"
oid
= netsnmp.Varbind('fgVpn')

oidval
= netsnmp.snmpwalk(oid, Version=3, DestHost='myremotehost',  SecName='mysnmpv3user', SecLevel='myauthlevel', PrivPass='myuserpass')
print oidval

Por hora, para contarnar o problema estou utilizando o modulo subprocess executando comandos do SO. Mas gostaria de utilizar uma lib ja implementada.

Desde já agradeço.

Em terça-feira, 27 de outubro de 2015 19:44:17 UTC-2, leandro candida da costa escreveu:

Victor Augusto Furtado Leite

unread,
Oct 29, 2015, 8:27:16 AM10/29/15
to python...@googlegroups.com
Maravilha Leandro!


Adinan, não entendo muito de SNMP... mas vamos lá, esse pacote que você tá usando tem uma interface de linha de comando, você já tentou fazer o mesmo comando via linha de comando pra ver se funciona? E você já tentou com outro pacote SNMP, tipo esse?

[]s


--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@googlegroups.com

---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasi...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.



--
Victor

Carlos Danilo Pereira Tomaz

unread,
Oct 29, 2015, 11:09:50 AM10/29/15
to python...@googlegroups.com
Pessoal, boa noite

Alguém tem algum script em python que concatena várias planilhas .xls em uma única planilha?

Eu conseui fazer um porém ele coloca todas as planilhas em uma única divididas nas sheets, e eu gostaria de concatenar todas planilhas em uma única sheet.


Abraços

Danilo

--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@googlegroups.com

---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasi...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.



--

Atenciosamente

Danilo

leandro candida da costa

unread,
Feb 25, 2016, 8:33:38 PM2/25/16
to Python Brasil
Victor Leite,

Boa noite !!!

no mesmo script ao ler outro equipamento está dando o seguinte erro:

File "counter32.py", line 19, in <module>

    print "%f" % struct.unpack("f", struct.pack("I", int(snmp[2]) ))
IndexError: list index out of range
Message has been deleted
Message has been deleted
Message has been deleted

William Souza

unread,
Feb 23, 2017, 10:36:57 AM2/23/17
to Python Brasil
Por acaso você tem algum material que ajude a transformar counter 32 em decimal, estou procurando a um tempo e não consegui ainda.
Muito obrigado!
Reply all
Reply to author
Forward
0 new messages