Active-devices

Omdat ik nogal vaak iets opzoek in de ip-arp lijst van de coreswitch heb ik er maar een scriptje omheen gebouwd met tevens een zoekoptie.
De zoekoptie kijkt of het gezochte een (compleet!) mac adres is en als deze in een ander formaat is dan wordt deze geconverteerd naar het dotted formaat dat cisco gebruikt. Zo werkt een copy-paste vanuit een andere bron in dubbele punt formaat of windows dhcp formaat (alles aan elkaar) ook.
LET OP: een gedeelte van een mac adres wordt niet herkend dus niet geconverteerd en dient altijd dotted te zijn !
Dus als er iemand stoeit met een nieuw device of een reservering heeft gemaakt dan kan eenvoudig dit script gedraait worden met het betreffende mac adres en alle actieve ip arp entries komen terug.
Ook hier is de python module netmiko weer nodig:
python3 -m pip install natsort netmiko
Bovenaan in het script moet even het ip adres of de naam van de coreswitch gezet worden en de juiste credentials.

Code

#!/usr/bin/python3
# file    : activedevices.py
# author  : Wouter Barendsen
# created : 2021-03-08 18:16
# modified: 2024-02-11 12:38:45
# 

import netmiko,sys,re

# Wijzig IP adres en credentials
Router="192.168.2.254"
UserName="user"
PassWord="password"

Zoek=""
Result=[]

def hellup():
  print("active-devices.py  2021-2024  Wouter Barendsen                       ")
  print("  Dit script haalt de ip-arp op uit een (core) router zodat we weten ")
  print("  welke devices momenteel actief zijn.                               ")
  print("  Als parameters kan een zoekstring meegegeven worden. Als de parame-")
  print("  ter een mac adres is maar in een non-cisco formaat dan wordt deze  ")
  print("  geconverteerd naar het dotted formaat van de ip-arp.")
  print("")
  sys.exit(1)

def SwitchCommand(Ip,Command):
  ssh_connection = netmiko.ConnectHandler(device_type='cisco_ios',ip=Ip,username=UserName,password=PassWord)
  #result = ssh_connection.find_prompt() + "\n"
  result = ssh_connection.send_command(Command, delay_factor=1)
  ssh_connection.disconnect()
  return result 

def Mac2Cisco(macAddress):
  oke=False
  # return dotted format. Mac al oke?, return Mac. Geen mac, return waarde
  match = re.search(r'[0-9a-fA-F]{4}.[0-9a-fA-F]{4}.[0-9a-fA-F]{4}',macAddress)
  if match:
    oke=True
  match = re.search(r'([0-9a-fA-F]{2}):([0-9a-fA-F]{2}):([0-9a-fA-F]{2}):([0-9a-fA-F]{2}):([0-9a-fA-F]{2}):([0-9a-fA-F]{2})',macAddress)
  if match:
    # dubbelepuntformat, wijzig naar dotted
    macAddress=match.group(1)+match.group(2)+"."+match.group(3)+match.group(4)+"."+match.group(5)+match.group(6)
    oke=True
  match = re.search(r'([0-9a-fA-F]{4})([0-9a-fA-F]{4})([0-9a-fA-F]{4})',macAddress)
  if match:
    # windows formaat, wijzig naar dotted
    macAddress=match.group(1)+"."+match.group(2)+"."+match.group(3)
    oke=True
  if oke:
    return(macAddress.lower())
  else:
    return(macAddress)

if len(sys.argv) >= 2:
  if sys.argv[1] == "-h" or sys.argv[1] == "--help":
    hellup()
  Zoek=sys.argv[1]
  # is Zoek een mac dan converteer naar dotted format van cisco
  Zoek=Mac2Cisco(Zoek)

Result=SwitchCommand(Router,"sh ip arp").split("\n")
for Regel in Result:
  if Zoek in Regel: print(Regel)

Output

$ active-devices.py 84cc.a8
Internet  192.168.4.166         243   84cc.a883.6630  ARPA   Vlan4
Internet  192.168.4.167          86   84cc.a8af.d7f9  ARPA   Vlan4
Internet  192.168.4.168           8   84cc.a8b1.763e  ARPA   Vlan4

Als je het wat vindt dan hoor ik dat graag.




Geef hieronder uw commentaar, mening of aanvullingen op deze pagina en lees de eventuele meldingen van andere lezers.

naam:
email:
spamcheck: 1999+1=...
opmerking:
   



Website door Wouter Barendsen, 2005-2024