Python - Snmpwalk

Répondre
gizmo78
Messages : 20534
Inscription : ven. 12 janv. 2018 17:44

Python - Snmpwalk

Message 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
Avatar de l’utilisateur
Zedoune
Messages : 15343
Inscription : ven. 12 janv. 2018 17:44

Python - Snmpwalk

Message par Zedoune »

ça renvoie quoi snmpwalk ?
gizmo78
Messages : 20534
Inscription : ven. 12 janv. 2018 17:44

Python - Snmpwalk

Message 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
Avatar de l’utilisateur
Zedoune
Messages : 15343
Inscription : ven. 12 janv. 2018 17:44

Python - Snmpwalk

Message 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 ? :??:
Avatar de l’utilisateur
Zedoune
Messages : 15343
Inscription : ven. 12 janv. 2018 17:44

Python - Snmpwalk

Message 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
gizmo78
Messages : 20534
Inscription : ven. 12 janv. 2018 17:44

Python - Snmpwalk

Message 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 ;)
Avatar de l’utilisateur
Zedoune
Messages : 15343
Inscription : ven. 12 janv. 2018 17:44

Python - Snmpwalk

Message par Zedoune »

Tiens voilà une version propre qu'un ami qui adore le python t'as écris :D

https://gist.github.com/killruana/9102252597ca631b00a0
gizmo78
Messages : 20534
Inscription : ven. 12 janv. 2018 17:44

Python - Snmpwalk

Message 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 ^^
Avatar de l’utilisateur
Zedoune
Messages : 15343
Inscription : ven. 12 janv. 2018 17:44

Python - Snmpwalk

Message 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
gizmo78
Messages : 20534
Inscription : ven. 12 janv. 2018 17:44

Python - Snmpwalk

Message par gizmo78 »

hé bien grand merci à lui :D
gizmo78
Messages : 20534
Inscription : ven. 12 janv. 2018 17:44

Python - Snmpwalk

Message par gizmo78 »

va falloir que je rajoute la fin car la ca affiche rien par exemple :)
Avatar de l’utilisateur
Zedoune
Messages : 15343
Inscription : ven. 12 janv. 2018 17:44

Python - Snmpwalk

Message 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)
gizmo78
Messages : 20534
Inscription : ven. 12 janv. 2018 17:44

Python - Snmpwalk

Message 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
Avatar de l’utilisateur
Zedoune
Messages : 15343
Inscription : ven. 12 janv. 2018 17:44

Python - Snmpwalk

Message par Zedoune »

tu as quelque chose dans err ?
gizmo78
Messages : 20534
Inscription : ven. 12 janv. 2018 17:44

Python - Snmpwalk

Message 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
Avatar de l’utilisateur
Zedoune
Messages : 15343
Inscription : ven. 12 janv. 2018 17:44

Python - Snmpwalk

Message 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
Avatar de l’utilisateur
Zedoune
Messages : 15343
Inscription : ven. 12 janv. 2018 17:44

Python - Snmpwalk

Message par Zedoune »

hey t'as vu que dans ton exemple y avait que 2 champs à la première ligne ?
gizmo78
Messages : 20534
Inscription : ven. 12 janv. 2018 17:44

Python - Snmpwalk

Message par gizmo78 »

ouaip mais cette ligne je m'en fou :D
Répondre