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 :D :D


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 :o

Le script est pas tip-top :whistle: (pas de commentaires, boucles pour rien, algo pas super logique) :P

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 :D

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? :D) 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? :D) je testerais ca à midi ^^
Oui c'est monsieur :P

Python - Snmpwalk

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

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 :D

par contre, la variable out est toujours nul donc le code est peut être plus beau/propre mais ca juste pas marche :o

(merci à lui hein joke tout ca ;) )

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

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 :P
Mauvaise interprétation, c'est pas "Mon" monsieur, c'est juste un monsieur, c'est pas une madame :P

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 :D