Files
lldp-mapper/README.md
T

2.5 KiB

LLDP Network Mapper

SSH-based network topology mapper for FS switches (and IOS-like CLIs). Discovers switch topology via LLDP, stores in SQLite, and visualises with Cytoscape.js.

Quick Start

1. Configure your switches

Edit mapper/config.py:

SWITCHES = [
    "192.168.1.1",
    "192.168.1.2",
    # Add all switch management IPs
]

SSH_USERNAME = "admin"
SSH_PASSWORD = "yourpassword"

2. Build and run

docker-compose up --build

3. Open the UI

Navigate to: http://localhost:5000

Click Scan Now to start discovery.


What it does

  • SSHs into each switch in parallel (up to 10 at once)
  • Runs show lldp neighbors and show ip interface brief
  • Parses neighbors, hostnames, management IPs, chassis IDs
  • Stores everything in SQLite (data/network.db)
  • De-duplicates bidirectional links automatically
  • Renders an interactive Cytoscape.js topology diagram
  • Exports to CSV, Mermaid (.md), and Graphviz PNG

Outputs

All files written to data/exports/:

File Purpose
topology.csv Switch links with hostnames and IPs
topology.md Mermaid diagram (paste into any markdown viewer)
topology.dot Graphviz source
topology.png Rendered network diagram

Auto-scan

Toggle auto-scan on/off from the UI. Set interval (15 min to 6 hours). State persists across container restarts.

Troubleshooting

Auth errors: Check SSH_USERNAME / SSH_PASSWORD in config.py

Timeout errors: Increase SSH_TIMEOUT in config.py (default: 30s)

Wrong device type: If your FS switch uses a non-IOS CLI, try changing DEVICE_TYPE to "linux" or "generic" in config.py

No management IP found: The script looks for Vlan interfaces in show ip interface brief. If your switch uses a different command, edit parser.py → parse_mgmt_ip_from_interfaces()

Project Structure

lldp-mapper/
├── app.py              # Flask API + scheduler
├── db.py               # SQLite operations
├── parser.py           # LLDP output parser
├── ssh_client.py       # Netmiko SSH + parallel scan
├── scanner.py          # Orchestrator
├── exports.py          # CSV / Mermaid / Graphviz
├── config.py           # Switch IPs + credentials (not committed)
├── config.py.example   # Config template
├── index.html          # Cytoscape.js frontend
├── data/               # SQLite DB + exports (created at runtime)
├── Dockerfile
├── docker-compose.yml
└── README.md