71 lines
2.0 KiB
Python
71 lines
2.0 KiB
Python
#!/usr/bin/env python3
|
|
"""UniFi Monitor - To be run manually"""
|
|
|
|
import requests
|
|
import urllib3
|
|
from datetime import datetime
|
|
|
|
# Disable SSL warnings
|
|
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
|
|
|
|
# Config
|
|
CONTROLLER = "https://192.168.0.39:8443"
|
|
USER = "corey"
|
|
PASS = "is41945549"
|
|
SITE = "default"
|
|
|
|
print("="*50)
|
|
print("UniFi Network Monitor")
|
|
print("="*50)
|
|
print(f"Controller: {CONTROLLER}")
|
|
print(f"User: {USER}")
|
|
print(f"Time: {datetime.now().strftime('%Y-%m-%d %H:%M')}")
|
|
print()
|
|
|
|
# Step 1: Login
|
|
print("Step 1: Logging in...")
|
|
login_url = f"{CONTROLLER}/api/auth/login"
|
|
resp = requests.post(login_url, json={"username": USER, "password": PASS}, verify=False, timeout=10)
|
|
print(f" Status: {resp.status_code}")
|
|
|
|
if resp.status_code != 200:
|
|
print(" ❌ Login failed!")
|
|
print(f" Response: {resp.text[:200]}")
|
|
exit(1)
|
|
|
|
print(" ✅ Login successful")
|
|
cookies = resp.cookies
|
|
|
|
# Step 2: Get clients
|
|
print("\nStep 2: Getting clients...")
|
|
clients_url = f"{CONTROLLER}/proxy/network/api/s/{SITE}/stat/sta"
|
|
resp = requests.get(clients_url, cookies=cookies, verify=False, timeout=10)
|
|
clients = resp.json().get('data', [])
|
|
print(f" Found: {len(clients)} clients")
|
|
|
|
# Step 3: Get devices
|
|
print("\nStep 3: Getting devices...")
|
|
devices_url = f"{CONTROLLER}/proxy/network/api/s/{SITE}/stat/device"
|
|
resp = requests.get(devices_url, cookies=cookies, verify=False, timeout=10)
|
|
devices = resp.json().get('data', [])
|
|
print(f" Found: {len(devices)} devices")
|
|
|
|
# Generate report
|
|
print("\n" + "="*50)
|
|
print("REPORT")
|
|
print("="*50)
|
|
print(f"\nConnected Clients: {len(clients)}")
|
|
|
|
wired = [c for c in clients if c.get('is_wired', False)]
|
|
wireless = [c for c in clients if not c.get('is_wired', False)]
|
|
print(f" - Wireless: {len(wireless)}")
|
|
print(f" - Wired: {len(wired)}")
|
|
|
|
print(f"\nUniFi Devices: {len(devices)}")
|
|
for d in devices[:3]:
|
|
name = d.get('name', d.get('mac', 'Unknown')[:17])
|
|
model = d.get('model', 'Unknown')
|
|
print(f" - {name} ({model})")
|
|
|
|
print("\n" + "="*50)
|