statsVlans : répararation et dépoussiérage

This commit is contained in:
Gabriel Detraz 2015-03-01 18:49:49 +01:00
parent 8b551ae8c8
commit 1d58966ebc

View file

@ -11,6 +11,9 @@ S'il est impossbile de se connecter à un switch, on abandonne le batiment conce
d'autre VLANs qu'"adherent", ainsi que les machines connectées sur ces prises.
Xavier Lagorce - 2009
Réparé en 2015, le script remarche excepté la recherche par mac, remplacée par défaut par
la recherche du propriétaire de la chambre (création de l'option -m)
"""
import sys, getopt
@ -63,12 +66,10 @@ def scan_bats(bats, annuaire=chbre_prises, verbose=False):
prises = dict()
for chbre, prise in annuaire(bat).iteritems():
prises[prise] = chbre
current_switch = -1
switch_name = ' '
for prise in sorted(prises.keys()):
# Si l'on est pas connecté au switch sur lequel se trouve la prise, on en change
if current_switch != int(prise[0]) :
switch_name = u"bat" + bat + u"-" + prise[0] + u".adm.crans.org"
@ -86,7 +87,11 @@ def scan_bats(bats, annuaire=chbre_prises, verbose=False):
# On récupère les VLANs présents sur la prise
try:
vlans = switch.vlans(prise)
vlans = switch.vlans(prise[1:])
if verbose:
print prise[1:]
for vlan in vlans:
print vlan
except ConversationError:
if verbose:
print u"\tErreur de communication avec " + switch_name
@ -106,7 +111,10 @@ def scan_bats(bats, annuaire=chbre_prises, verbose=False):
vlans_stats[vlan] = vlans_stats[vlan] + 1
# On récupère les données pour les afficher plus tard
try:
if macres:
macs = switch.show_prise_mac(int(prise[1:]))
else:
macs = []
except ConversationError:
if verbose:
print u"\tErreur de communication avec " + switch_name
@ -130,6 +138,7 @@ def scan_bats(bats, annuaire=chbre_prises, verbose=False):
m.nom().split('.')[0],
t,
', '.join(sorted(vlans))])
# Si aucune machine n'est connectée, on ajoute quand même une
# entrée dans les résultats
else:
@ -183,6 +192,8 @@ def __usage():
Affiche ce message d'aide.
-v / --verbose :
Affiche le détail des connexions aux switchs pendant le scan.
-m / --macresearch
Effectue un traitement des résultats par mac (et non par propriétaire de chambre)
Une des options --all ou --bats doit être obligatoirement spécifiée.
"""
@ -196,15 +207,17 @@ if __name__ == "__main__":
__usage_brief()
try:
options, arg = getopt.gnu_getopt(sys.argv[1:],'ab:p:hv',
['all','bats=','prises=','help','verbose'])
options, arg = getopt.gnu_getopt(sys.argv[1:],'ab:p:hvm',
['all','bats=','prises=','help','verbose','macresearch'])
except getopt.error, msg :
__usage_brief(unicode(msg))
# Traitement des options
verb = False
bats = ''
all_prises = False
macres = False
for opt, val in options:
if opt == '-a' or opt == '--all':
@ -227,6 +240,9 @@ if __name__ == "__main__":
elif opt == '-v' or opt == '--verbose':
verb = True
elif opt == '-m' or opt == '--macresearch':
macres = True
if not bats:
__usage_brief(u"il faut spécifier des bâtiments à scanner")