From 1d58966ebce86e8fcf1eeec858974df0df8a73bd Mon Sep 17 00:00:00 2001 From: Gabriel Detraz Date: Sun, 1 Mar 2015 18:49:49 +0100 Subject: [PATCH] =?UTF-8?q?statsVlans=20:=20r=C3=A9pararation=20et=20d?= =?UTF-8?q?=C3=A9poussi=C3=A9rage?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- surveillance/statsVlans.py | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/surveillance/statsVlans.py b/surveillance/statsVlans.py index 9760bbb5..dc46f62e 100755 --- a/surveillance/statsVlans.py +++ b/surveillance/statsVlans.py @@ -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: - macs = switch.show_prise_mac(int(prise[1:])) + 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")