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 netmikoBovenaan 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.
Website door Wouter Barendsen, 2005-2026
