CiscoConnect/README.md

194 lines
3.7 KiB
Markdown

# Cisco Switch Port Status Monitor (Telnet)
A Python-based monitoring tool that connects to a **Cisco switch via Telnet**, collects **interface status and PoE information**, and displays **active (connected) ports** in a clean **GUI dashboard**.
This project is designed for **homelab, lab, and operational environments** where SSH may not be available and Telnet is still in use.
---
## ✨ Features
- ✅ Telnet connection using `pexpect`
-**Supports login without username**
- ✅ Handles:
- Password-only login
- Username + password login
- Direct `>` or `#` prompt
- Enable (`enable`) password
- ✅ Automatically disables terminal paging
- ✅ Collects:
- Interface link status
- VLAN
- Speed (human readable)
- Duplex
- PoE admin/oper state
- PoE power usage (Watts)
- ✅ GUI table with:
- Auto refresh
- Manual refresh
- Sortable columns
- ✅ Designed to recover from connection failures gracefully
---
## 🖥️ GUI Overview
The GUI displays **only active (connected) ports** in a sortable table:
| Column | Description |
|------|------------|
| Port | Cisco interface converted to Port number |
| VLAN | Access VLAN |
| Speed | Human-readable link speed |
| Duplex | Full / Half |
| PoE Admin | PoE enabled/disabled |
| PoE Oper | PoE operational state |
| Power (W) | Power drawn by the device |
A status bar at the bottom shows:
- Connection state
- Errors
- Last refresh time
---
## 📦 Requirements
### Python
- Python **3.8+** recommended
### System packages
Tkinter is required for the GUI.
#### Debian / Ubuntu / Raspberry Pi OS
```bash
sudo apt install python3-tk
```
#### RedHat / Rocky / Alma / CentOS
```bash
sudo dnf install python3-tkinter
```
#### Arch / Manjaro
```bash
sudo pacman -S tk
```
### Python modules
```bash
pip install pexpect
```
---
## ⚙️ Configuration
Edit these variables at the top of `status.py`:
```python
SWITCH_IP = "10.183.100.11"
TELNET_PORT = 23
USERNAME = "" # optional
PASSWORD = "telnetpass"
ENABLE_PASSWORD = "enablepass"
```
### 🔐 Login without username
If your switch does **not** require a username:
```python
USERNAME = ""
```
This is fully supported.
---
## 🌱 Environment Variables (Recommended)
Instead of hardcoding credentials:
```bash
export SWITCH_USER=""
export SWITCH_PASS="telnetpass"
export SWITCH_ENABLE="enablepass"
python3 status.py
```
This keeps secrets out of source code.
---
## 🚀 Running the Program
```bash
python3 status.py
```
If running on a **headless server**, ensure:
- X11 / Wayland forwarding is available, **or**
- Use a desktop environment
For pure server usage, consider converting this to a **web dashboard**.
---
## 🔁 Refresh Behavior
- Auto refresh every **10 seconds** (configurable in GUI)
- Manual refresh button
- Auto refresh can be paused/resumed
The program safely:
- Reconnects on failure
- Retries after timeouts
- Never blocks the GUI
---
## 🛠️ How It Works (Internals)
1. Connects via Telnet using `pexpect`
2. Detects login prompt type
3. Enters enable mode if required
4. Runs:
- `show interfaces status`
- `show power inline`
5. Parses CLI output with regex
6. Merges interface + PoE data
7. Displays connected ports in GUI
---
## ⚠️ Notes & Limitations
- Telnet must be enabled on the switch
- Tested primarily on Cisco IOS-style output
- Parsing may need adjustment for NX-OS / IOS-XE variants
- GUI requires a graphical environment
---
## 🔮 Possible Extensions
- Web-based dashboard (Flask / FastAPI)
- Port search & filtering
- Historical PoE graphs
- Alerts for power spikes or link changes
- SSH support
---
## 📜 License
MIT License — use, modify, and share freely.
---
## 👤 Author
Created for homelab and operational monitoring of Cisco switches.
Feel free to extend and adapt.