83 lines
2.4 KiB
Python
83 lines
2.4 KiB
Python
#!/usr/bin/env python3
|
|
"""Diagnose RADIUS auth failure on Verona router after RouterOS upgrade."""
|
|
|
|
import sys
|
|
from mikrotik_connect import MikrotikAPI
|
|
|
|
|
|
def section(title):
|
|
print(f"\n{'=' * 70}\n=== {title}\n{'=' * 70}")
|
|
|
|
|
|
def dump(results):
|
|
if not results:
|
|
print("(no results)")
|
|
return
|
|
for r in results:
|
|
for k, v in r.items():
|
|
print(f" {k}: {v}")
|
|
print("---")
|
|
|
|
|
|
def main():
|
|
api = MikrotikAPI("10.254.254.101", "grahamro",
|
|
"cFKhz8q5gPLoucMbcT1Iy58r3IXgc3")
|
|
if not api.connect():
|
|
sys.exit(1)
|
|
if not api.login():
|
|
sys.exit(1)
|
|
|
|
try:
|
|
section("RouterOS version / identity")
|
|
dump(api.command("/system/resource/print"))
|
|
dump(api.command("/system/routerboard/print"))
|
|
dump(api.command("/system/identity/print"))
|
|
|
|
section("RADIUS clients (/radius print detail)")
|
|
dump(api.command("/radius/print"))
|
|
|
|
section("RADIUS incoming settings")
|
|
dump(api.command("/radius/incoming/print"))
|
|
|
|
section("AAA settings for user logins (/user aaa print)")
|
|
dump(api.command("/user/aaa/print"))
|
|
|
|
section("PPP AAA settings (/ppp aaa print)")
|
|
dump(api.command("/ppp/aaa/print"))
|
|
|
|
section("PPP profiles (may reference radius)")
|
|
dump(api.command("/ppp/profile/print"))
|
|
|
|
section("PPP secrets count")
|
|
secrets = api.command("/ppp/secret/print", ["=count-only="])
|
|
print(secrets)
|
|
|
|
section("Active PPP sessions")
|
|
dump(api.command("/ppp/active/print"))
|
|
|
|
section("Hotspot servers (if any)")
|
|
dump(api.command("/ip/hotspot/print"))
|
|
|
|
section("Recent log messages (last 200)")
|
|
logs = api.command("/log/print")
|
|
# Show only most recent 200 and filter those with radius / auth / ppp
|
|
for entry in logs[-200:]:
|
|
msg = entry.get("message", "")
|
|
topics = entry.get("topics", "")
|
|
time = entry.get("time", "")
|
|
if any(k in (msg + topics).lower() for k in
|
|
["radius", "auth", "ppp", "login", "fail", "reject"]):
|
|
print(f"[{time}] {topics}: {msg}")
|
|
|
|
section("Certificates (RADIUS over TLS / EAP may need these)")
|
|
dump(api.command("/certificate/print"))
|
|
|
|
section("IP services (enabled management services)")
|
|
dump(api.command("/ip/service/print"))
|
|
|
|
finally:
|
|
api.disconnect()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|