This commit is contained in:
parent
c528d4b623
commit
d468a256ea
|
|
@ -0,0 +1,193 @@
|
||||||
|
# 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.
|
||||||
Loading…
Reference in New Issue