Modern, fast, and secure Looking Glass implementation in Go
A high-performance network diagnostic tool for ISPs, hosting providers, and network operators. Supports multiple router vendors (Juniper, Huawei, Cisco) with a beautiful, responsive web interface and real-time streaming capabilities.
**Author:**Paolo Caparrelli | **Company:**GOLINE SA Contact: noc@goline.ch | **AS:**AS202032
- High Performance: Built in Go for maximum speed and efficiency
- Real-time Streaming: Live traceroute and ping output with hop-by-hop results
- Multi-Vendor Support: Juniper (Junos), Huawei (VRP), Cisco (IOS/IOS-XE)
- Security First: SSH authentication, rate limiting, input validation
- Responsive Design: Beautiful UI that works on all devices
- Container Ready: Docker and Kubernetes deployment options
- Easy Setup: Automated installation and configuration scripts
- Customizable: Full branding and theme customization
- Comprehensive: BGP routes, ping, traceroute, neighbor analysis
- IPv6 Ready: Full dual-stack IPv4/IPv6 support
- Auto-scroll: Follow command output in real-time
- ISP Looking Glass: Provide customers with network diagnostic tools
- Hosting Providers: Allow clients to test connectivity and routing
- Enterprise Networks: Internal network troubleshooting interface
- Educational: Network engineering training and demonstration
- NOC Tools: Quick network diagnostics for operations teams
Pull and run the pre-built Docker image:
# Pull from Docker Hub
docker pull paolokappa/goline-looking-glass:latest
# Run the container
docker run -d \
--name goline-looking-glass \
-p 3002:3002 \
paolokappa/goline-looking-glass:latest
# Access at http://localhost:3002🐳 Docker Hub: paolokappa/goline-looking-glass
Available tags:
latest- Latest stable version with streaming features2.0.15-simple-streaming- Specific version with real-time streaming
Docker Compose example:
version: '3.8'
services:
goline-looking-glass:
image: paolokappa/goline-looking-glass:latest
container_name: goline-looking-glass
restart: unless-stopped
ports:
- "3002:3002"
environment:
- GIN_MODE=release
- PORT=3002
volumes:
- ./logs:/app/logs
- ./config.json:/app/config.json:ro
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3002/api/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40sThen run:
docker-compose up -dcurl -sSL https://raw.githubusercontent.com/paolokappa/goline-looking-glass/main/scripts/install.sh | bash# Clone repository
git clone https://github.com/paolokappa/goline-looking-glass.git
cd goline-looking-glass
# Install dependencies and build
make setup
make build
# Configure your environment
cp config/company.example.json config/company.json
cp config/routers.example.json config/routers.json
# Edit configurations
nano config/company.json
nano config/routers.json
# Install system service
sudo make install
# Setup SSL (optional)
sudo ./scripts/setup-ssl.sh yourdomain.com noc@yourdomain.com# Quick start with Docker Compose
git clone https://github.com/paolokappa/goline-looking-glass.git
cd goline-looking-glass
docker-compose up -dThis Looking Glass features breakthrough real-time output streaming for:
- Traceroute commands - See each hop as it appears, hop-by-hop
- Ping commands - Live packet results as they arrive
- Auto-scroll functionality with manual override
- Stop/Resume controls for long-running commands
- ** 5-minute timeout** for extended traces to distant destinations
- No more timeouts - Commands complete successfully
The streaming interface shows live output like this:
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 52 byte packets
1 gateway (192.168.1.1) 1.234 ms 1.123 ms 1.456 ms
2 provider.com (10.1.1.1) 15.678 ms 14.234 ms 16.123 ms
3 backbone.net (203.0.113.1) 25.123 ms 24.567 ms 26.789 ms
[continues in real-time...]
| Feature | Juniper | Huawei | Cisco | Description |
|---|---|---|---|---|
| BGP Route Lookup | Yes | Yes | Yes | Query specific routes in BGP table |
| BGP Neighbors | Yes | Yes | Yes | Display BGP peer status and info |
| BGP Summary | Yes | Yes | Yes | Overview of all BGP sessions |
| Advertised Routes | Yes | Yes | Yes | Routes advertised to specific peers |
| Route Filtering | Yes | Yes | Yes | Filter routes by community, AS-path |
| Ping Tests | Yes | Yes | Yes | ICMP connectivity testing |
| Traceroute | Yes | Yes | Yes | Network path analysis |
| Real-time Streaming | Yes | Yes | Yes | NEW: Live command output |
| IPv6 Support | Yes | Yes | Yes | Full dual-stack support |
| AS Path Analysis | Yes | Yes | Yes | BGP path information |
| Community Strings | Yes | Yes | Yes | BGP community filtering |
- Installation Guide - Complete installation instructions
- Configuration Guide - System and application configuration
- Router Setup - Router-specific configuration
- Customization - Theming and branding options
- Docker Deployment - Container-based deployment
- Kubernetes - Kubernetes deployment manifests
- Cloud Deployment - AWS, GCP, Azure deployment guides
- Security Guide - Security best practices and hardening
- Monitoring - Monitoring and alerting setup
- Troubleshooting - Common issues and solutions
- Performance - Performance tuning and optimization
- Development Setup - Local development environment
- Contributing - How to contribute to the project
- API Reference - REST API documentation
- Testing - Testing guidelines and procedures
{
"company": {
"name": "Your ISP Name",
"as_number": "AS64512",
"domain": "yourisp.com",
"support_email": "noc@yourisp.com",
"logo_path": "/images/logo.png",
"theme": {
"primary_color": "#1e3a8a",
"secondary_color": "#667eea",
"background": "navy"
}
}
}{
"routers": [
{
"name": "Primary Core Router",
"display_name": "NYC-Core-01",
"hostname": "core1.yourisp.com",
"type": "juniper",
"username": "${ROUTER_USER}",
"ssh_key": "/opt/looking-glass/keys/router_key"
}
]
}- OS: Ubuntu 20.04+, CentOS 8+, RHEL 8+, Debian 11+
- Memory: 512MB RAM (1GB recommended)
- CPU: 1 vCPU (2+ recommended for high traffic)
- Storage: 1GB free space
- Network: SSH access to routers
- Go 1.21+ (for building from source)
- Apache 2.4+ or Nginx 1.18+ (for SSL termination)
- OpenSSH client
- Git
- Docker (for containerized deployment)
- 🌍 GOLINE SA Production: https://lg.goline.ch - Live production instance with real-time streaming ✨
- 🚢 Docker Quick Test:
docker run -p 3002:3002 paolokappa/goline-looking-glass:latest🚀
| Metric | Value | Notes |
|---|---|---|
| Response Time | < 50ms | Average API response time |
| Concurrent Users | 1000+ | Tested concurrent connections |
| Memory Usage | ~50MB | Typical memory footprint |
| Command Execution | < 5min | Maximum command timeout (streaming) |
| Throughput | 10,000+ req/min | Peak request handling |
| Streaming Latency | < 100ms | Real-time output delay |
GET /api/health- Health check and version infoGET /api/routers- Available routers listPOST /api/execute- Execute network commands (standard)
POST /api/execute-stream- NEW: Execute with real-time streaming- WebSocket endpoints for live updates
# Health check
curl http://localhost:3002/api/health
# Execute traceroute with streaming
curl -X POST http://localhost:3002/api/execute-stream \
-H "Content-Type: application/json" \
-d '{"query":"trace","addr":"8.8.8.8","router":"router1","protocol":"IPv4"}'We welcome contributions from the community! Here's how you can help:
- 🐛 Report Bugs: Use GitHub Issues
- 💡 Feature Requests: Propose new features via issues
- 📤 Pull Requests: Submit code improvements
- 📝 Documentation: Help improve documentation
- 🧪 Testing: Test on different platforms and configurations
See our Contributing Guide for detailed information.
# Fork and clone the repository
git clone https://github.com/yourusername/goline-looking-glass.git
cd goline-looking-glass
# Setup development environment
make setup
# Run tests
make test
# Build and run locally
make runThis project is licensed under the MIT License - see the LICENSE file for details.
- Commercial use allowed
- Modification allowed
- Distribution allowed
- Private use allowed
- No liability
- No warranty
GOLINE SA is a Swiss-based network services provider specializing in:
- 🌐 Internet Transit and Peering (AS202032)
- 🖥️ Dedicated Server Hosting
- 🛠️ Network Infrastructure Solutions
- ☁️ Cloud Connectivity Services
Learn more: https://goline.ch
Paolo Caparrelli
- Company: GOLINE SA
- Email: noc@goline.ch
- Website: https://goline.ch
- LinkedIn: Paolo Caparrelli
- GitHub: @paolokappa
- Bug Reports: GitHub Issues
- Discussions: GitHub Discussions
- 📝 Documentation: GitHub Wiki
- 📧 Technical Support: noc@goline.ch
- 💼 Enterprise Inquiries: sales@goline.ch
- 📞 Phone: +41 91 2607650 (Business hours: UTC+1)
- 🌐 Website: https://goline.ch
- 📡 Network Info: AS202032 Details
- 🔍 Live Demo: https://lg.goline.ch
- 🐳 Docker Hub: paolokappa/goline-looking-glass
Special thanks to:
- Gin Web Framework - HTTP web framework
- SSH Library - SSH client implementation
- Go Community - Amazing programming language and ecosystem
- Network Community - Inspiration and feedback
- Docker Community - Containerization platform
- Contributors - Everyone who has contributed to this project
If you find this project useful, please consider giving it a star!
Built with by Paolo Caparrelli at GOLINE SA - Featuring breakthrough real-time streaming technology


