[hptools] On améliore la fonction walk
This commit is contained in:
parent
e2b39511a5
commit
5f98e6d528
2 changed files with 24 additions and 24 deletions
|
@ -17,6 +17,7 @@ from os.path import exists
|
||||||
from os import system
|
from os import system
|
||||||
import sys
|
import sys
|
||||||
from re import findall
|
from re import findall
|
||||||
|
import re
|
||||||
from config import vlans
|
from config import vlans
|
||||||
|
|
||||||
path.append('/usr/scripts/gestion')
|
path.append('/usr/scripts/gestion')
|
||||||
|
@ -145,11 +146,11 @@ class snmp :
|
||||||
self._engineid = '0000000b0000%s' % self.getBaseMac()
|
self._engineid = '0000000b0000%s' % self.getBaseMac()
|
||||||
|
|
||||||
def __exec(self,cmd) :
|
def __exec(self,cmd) :
|
||||||
s, r = getstatusoutput(cmd)
|
status, response = getstatusoutput(cmd)
|
||||||
if s :
|
if status:
|
||||||
r=r.replace('snmpget: ','')
|
response = response.replace('snmpget: ','')
|
||||||
raise ConversationError(r,cmd)
|
print 'Erreur : '+response+' : '+cmd
|
||||||
return r
|
return response
|
||||||
|
|
||||||
def get(self,oid) :
|
def get(self,oid) :
|
||||||
""" Retourne le résultat correspondant à l'oid demandé """
|
""" Retourne le résultat correspondant à l'oid demandé """
|
||||||
|
@ -182,12 +183,14 @@ class snmp :
|
||||||
""" Retourne le résultat de snmpwalk
|
""" Retourne le résultat de snmpwalk
|
||||||
le retour est un dictionnaire { oid : valeur }
|
le retour est un dictionnaire { oid : valeur }
|
||||||
"""
|
"""
|
||||||
lignes = self.__exec('snmpwalk -O q %s %s' % (self.options, base_oid ) ).split('\n')
|
lignes = self.__exec('snmpwalk -Ox %s %s' % (self.options, base_oid ) ).split('\n')
|
||||||
result = {}
|
result = {}
|
||||||
for l in lignes :
|
for ligne in lignes:
|
||||||
if l !="" :
|
try:
|
||||||
oid, valeur = l.split(' ', 1)
|
oid, valeur = ligne.split('Hex-STRING: ')
|
||||||
result[oid] = valeur
|
result[oid] = valeur
|
||||||
|
except:
|
||||||
|
pass
|
||||||
return result
|
return result
|
||||||
|
|
||||||
#############################################################################################
|
#############################################################################################
|
||||||
|
@ -228,11 +231,11 @@ class hpswitch :
|
||||||
data = self.walk('STATISTICS-MIB::hpSwitchPortFdbAddress.%d' % int(prise))
|
data = self.walk('STATISTICS-MIB::hpSwitchPortFdbAddress.%d' % int(prise))
|
||||||
macs = []
|
macs = []
|
||||||
for value in data.itervalues():
|
for value in data.itervalues():
|
||||||
mac = findall('".*"', value)[0][1:-1]
|
mac = value.replace(' ', '').lower().replace('"', '')
|
||||||
if ' ' in mac:
|
if not re.match('([0-9a-f]{2}){6}', mac):
|
||||||
macs.append(":".join(mac.lower().split(" ")[:-1]))
|
mac = mac.encode('hex').lower()
|
||||||
else:
|
mac = "%s:%s:%s:%s:%s:%s" % (mac[0:2], mac[2:4], mac[4:6], mac[6:8], mac[8:10], mac[10:12])
|
||||||
macs.append(":".join("%02x" % ord(digit) for digit in mac))
|
macs.append(mac)
|
||||||
return macs
|
return macs
|
||||||
except ValueError:
|
except ValueError:
|
||||||
# Pas de MAC trouvée
|
# Pas de MAC trouvée
|
||||||
|
@ -241,12 +244,7 @@ class hpswitch :
|
||||||
def where_is_mac(self, mac) :
|
def where_is_mac(self, mac) :
|
||||||
"""Retrouve la prise correspondant à une adresse MAC donnée"""
|
"""Retrouve la prise correspondant à une adresse MAC donnée"""
|
||||||
if self.__debug : self.__logDest.write("HP DEBUG : where_is_mac(mac=%s)\n" % mac)
|
if self.__debug : self.__logDest.write("HP DEBUG : where_is_mac(mac=%s)\n" % mac)
|
||||||
# On va transformer l'adresse MAC cherchée pour la mettre au format 0A 0A 0A 0A 0A 0A
|
mac = mac.lower()
|
||||||
mac = mac.upper()
|
|
||||||
mac = filter(lambda x: x in "0123456789ABCDEF", mac) # 0A0A0A0A0A0A
|
|
||||||
mac = "%s %s %s %s %s %s" % (mac[0:2], mac[2:4], mac[4:6],
|
|
||||||
mac[6:8], mac[8:10], mac[10:12])
|
|
||||||
|
|
||||||
# On interroge le switch
|
# On interroge le switch
|
||||||
try:
|
try:
|
||||||
data = self.walk('STATISTICS-MIB::hpSwitchPortFdbAddress')
|
data = self.walk('STATISTICS-MIB::hpSwitchPortFdbAddress')
|
||||||
|
@ -257,13 +255,15 @@ class hpswitch :
|
||||||
# On cherche dans data la bonne adresse MAC
|
# On cherche dans data la bonne adresse MAC
|
||||||
for (onesnmp, onemac) in data.iteritems():
|
for (onesnmp, onemac) in data.iteritems():
|
||||||
try:
|
try:
|
||||||
onemac = findall('".*"', onemac)[0][1:-1]
|
onemac = onemac.replace(' ', '').lower().replace('"', '')
|
||||||
if ' ' not in onemac:
|
if not re.match('([0-9a-f]{2}){6}', onemac):
|
||||||
onemac = " ".join("%02x" % ord(digit) for digit in mac)
|
onemac = onemac.encode('hex').lower()
|
||||||
|
onemac = "%s:%s:%s:%s:%s:%s" % (onemac[0:2], onemac[2:4], onemac[4:6], onemac[6:8], onemac[8:10], onemac[10:12])
|
||||||
if onemac.startswith(mac):
|
if onemac.startswith(mac):
|
||||||
return int(onesnmp.split(".")[1])
|
return int(onesnmp.split(".")[1])
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
onemac = ""
|
||||||
|
|
||||||
# On a rien trouvé
|
# On a rien trouvé
|
||||||
return None
|
return None
|
||||||
|
|
|
@ -82,4 +82,4 @@ def trace_machine(mac, affiche_uplinks=False):
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
mac = format_mac(sys.argv[1])
|
mac = format_mac(sys.argv[1])
|
||||||
affiche_uplinks = len(sys.argv) > 2 and bool(sys.argv[2])
|
affiche_uplinks = len(sys.argv) > 2 and bool(sys.argv[2])
|
||||||
print trace_machine(mac, affiche_uplinks)
|
print trace_machine(mac, affiche_uplinks).encode('utf-8')
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue