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