Page 1 sur 1
Python - Snmpwalk
Publié : dim. 3 janv. 2016 22:32
par gizmo78
Bonsoir à tous,
Je me heurte à un soucis de scripts.
Déjà mon script:
[cpp]#!/usr/bin/env python
import subprocess
first = subprocess.Popen("cat oid | awk '{print $1}'", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).stdout.read()
third = subprocess.Popen("cat oid | awk '{print $3}'", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).stdout.read()
count = 0
len = 0
for line in first.splitlines():
len += 1
while count != len:
uno = first.splitlines()[count]
tres = third.splitlines()[count]
count += 1
print ("{0}").format(uno)
print ("{0}").format(tres)
command = "snmpwalk -v 1 -c public -OevQ 172.17.0.4 {0}".format(tres)
print ("{0}").format(command)
snmp = subprocess.Popen([
'snmpwalk',
'-v', '1',
'-c', 'public',
'-OevQ',
'172.17.0.4', '{0}'],
shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).stdout.read().format(tres)
print ("{0}").format(snmp)[/cpp]
La source, un fichier avec des mib dedans de ce style:
[cpp]rPDU 1.3.6.1.4.1.318.1.1.12
rPDUIdent rPDUIdent 1.3.6.1.4.1.318.1.1.12.1
rPDUIdentName rPDUIdentName 1.3.6.1.4.1.318.1.1.12.1.1
rPDUIdentDeviceNumBreakers rPDUIdentDeviceNumBreakers 1.3.6.1.4.1.318.1.1.12.1.10
rPDUIdentDeviceBreakerRating rPDUIdentDeviceBreakerRating 1.3.6.1.4.1.318.1.1.12.1.11[/cpp]
Le but du script? parcourir toute les mib, faire le snmpwalk, coller la valeur dans un tableau puis écrire ce tableau dans un fichier.
Le problème:
Les commandes cat fonctionnent mais pas le snmpwalk, ca me renvoie une ligne blanche.
Une idée du soucis?
Merci
Python - Snmpwalk
Publié : dim. 3 janv. 2016 22:51
par Zedoune
ça renvoie quoi snmpwalk ?
Python - Snmpwalk
Publié : dim. 3 janv. 2016 23:03
par gizmo78
avec la ligne:
rPDUIdentDevicePowerWatts rPDUIdentDevicePowerWatts 1.3.6.1.4.1.318.1.1.12.1.16
ca me renvoie un chiffre unique, 368
Python - Snmpwalk
Publié : dim. 3 janv. 2016 23:13
par Zedoune
Ces lignes :
first = subprocess.Popen("cat oid | awk '{print $1}'", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).stdout.read()
third = subprocess.Popen("cat oid | awk '{print $3}'", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).stdout.read()
c'est vraiment dans le code ou c'est pour cacher quelque chose ? Vous parsez des champs avec des espaces avec un fork, un cat et un awk alors que c'est un prog en python ? Rassures moi c'est pas vrai
Pour ton problème, est-ce que dans '{0}' le {0} est remplacé alors qu'il est dans les ' ' ? Souvent dans les langages, les variables ne sont pas remplacées dans les simples quotes mais seulement dans les doubles quote. Je n'ai pas fait de python depuis longtemps je ne m'en souviens plus.
PS : et ça
for line in first.splitlines():
len += 1
y a pas un len = first.splitlines().count() ? ou un truc du genre ?

Python - Snmpwalk
Publié : dim. 3 janv. 2016 23:24
par Zedoune
Je crois que j'ai trouvé
ici
Code : Tout sélectionner
snmp = subprocess.Popen([
'snmpwalk',
'-v', '1',
'-c', 'public',
'-OevQ',
'172.17.0.4', '{0}'],
shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).stdout.read().format(tres)
tu es censé remplacé {0} par la valeur de tres si j'ai bien compris la doc de format() =>
https://docs.python.org/2/library/string.html
hors, je pense qu'ici le format se fera sur le résultat ou tout du moins sur l'objet Popen, et non sur ce qui est passé en paramètre.
Et puis alors je ne dirais rien sur les noms des variables
Le script est pas tip-top

(pas de commentaires, boucles pour rien, algo pas super logique)

Python - Snmpwalk
Publié : lun. 4 janv. 2016 09:47
par gizmo78
alors déjà merci pour le coup de main.
Niveau algo pas super logique, je m'en fou pour l'instant. Ce que je veux c'est que ca marche, que j'ai les bonnes commandes, puis je remets en forme.
Pour les deux premières lignes, si elles sont comme ca, c'est plus galère de faire du parsing de fichier avec python que comme ca. c'est peut être pas la meilleure technique mais pour un script qui va servir 15jours je m'en fou

Python - Snmpwalk
Publié : lun. 4 janv. 2016 10:08
par Zedoune
Tiens voilà une version propre qu'un ami qui adore le python t'as écris
https://gist.github.com/killruana/9102252597ca631b00a0
Python - Snmpwalk
Publié : lun. 4 janv. 2016 10:13
par gizmo78
j'aime le python mais j'en fais pas assez régulièrement pour augmenter mon level significativement :/
merci à lui (c'est Mr?

) je testerais ca à midi ^^
Python - Snmpwalk
Publié : lun. 4 janv. 2016 10:13
par Zedoune
j'aime le python mais j'en fais pas assez régulièrement pour augmenter mon level significativement :/
merci à lui (c'est Mr?

) je testerais ca à midi ^^
Oui c'est monsieur

Python - Snmpwalk
Publié : lun. 4 janv. 2016 12:39
par gizmo78
hé bien grand merci à lui

Python - Snmpwalk
Publié : lun. 4 janv. 2016 12:42
par gizmo78
va falloir que je rajoute la fin car la ca affiche rien par exemple

Python - Snmpwalk
Publié : lun. 4 janv. 2016 12:46
par Zedoune
en effet ça n'affiche rien là mais c'est pas trop dur de rajouter des print ^^
D'ailleurs, faire print("{0}").format(variable) c'est pas top, autant faire print(variable) ^^
print().format() ça sert un peu comme le printf si tu veux mettre du texte autour des variables et concaténer le tout. Genre print("Le résultat est {0} .").format(variable)
Python - Snmpwalk
Publié : lun. 4 janv. 2016 12:51
par gizmo78
ouaip effectivement ^^
je gère les prints
par contre, la variable out est toujours nul donc le code est peut être plus beau/propre mais ca juste pas marche
(merci à lui hein joke tout ca

)
edit: le print(err) c'est le bien

Python - Snmpwalk
Publié : lun. 4 janv. 2016 13:07
par Zedoune
tu as quelque chose dans err ?
Python - Snmpwalk
Publié : lun. 4 janv. 2016 13:09
par gizmo78
ouaip:
rPDUIdentDevicePowerWatts
1.3.6.1.4.1.318.1.1.12.1.16
No hostname specified.
et le help de snmpwalk ^^
bizarre car la commande à la main fonctionne
Python - Snmpwalk
Publié : lun. 4 janv. 2016 13:40
par Zedoune
Oui c'est monsieur

Mauvaise interprétation, c'est pas "Mon" monsieur, c'est juste un monsieur, c'est pas une madame

Python - Snmpwalk
Publié : lun. 4 janv. 2016 13:47
par Zedoune
hey t'as vu que dans ton exemple y avait que 2 champs à la première ligne ?
Python - Snmpwalk
Publié : lun. 4 janv. 2016 13:55
par gizmo78
ouaip mais cette ligne je m'en fou
