A self-hosted network looking glass written in Go, with no external Go module
dependencies. Probe functionality relies on the ping, traceroute, and
dig OS utilities documented in INSTALL.md. Designed for ISPs,
data centers, and network operators who need full infrastructure autonomy.
Probes are distributed across multiple measurement nodes. The master orchestrates, and the agents execute. BGP routing data is converted from a local MRT snapshot into the JSON consumed by the Master, then enriched with GeoIP and AS operator information at query time.
go build -ldflags="-s -w" -trimpath -o looking-glass .The public checkout contains the Master/runtime source. The measurement agent
and offline data-preparation tools are private operator tooling: their
operational interfaces are documented here, but their cmd/ implementations
are not distributed in the public repository.
See INSTALL.md for full deployment instructions.
- Multi-node ping — all nodes probed in parallel, results in a single table
- Traceroute — user selects source node. Output streamed in real time via SSE. Each hop IP is enriched with ASN and operator name from the canonical GeoIP dataset.
- HTTP(S) check — all nodes probed in parallel, redirects not followed, TLS certificate verified
- Port check — TCP connect with open/closed/filtered status
- DNS lookup — queries multiple resolvers in parallel and returns clean grouped results (shows how many resolvers returned each record)
- SSL inspection — certificate details, validity window, SAN list
- BGP route lookup — IP, prefix, ASN; enriched with GeoIP and AS operator names
- AS path rendered as directed chain:
AS34549 (meerfarbig) → AS15169 (Google LLC) - Shareable results — "Copy Link" button available on all tools. Generated links can auto-run the check when opened (
run=1) - Permanent Link — freezes the actual result a check produced and serves it back, read-only, from a stored copy for 24 hours
The public GitHub checkout contains the Master/runtime source:
main.go master entry point
internal/bgp/ BGP table: radix trie, JSON loader, hot-reload
internal/geoip/ canonical CSV loader, radix trie, ASN index
internal/handler/ HTTP handlers and agent proxy
internal/nodes/ node registry
internal/ratelimit/ token bucket rate limiter
internal/report/ ephemeral cache and Permanent Link report store
internal/validator/ input sanitization
web/ frontend assets (embedded at build time)
web/index.html main HTML file
web/css/style.css extracted styles
web/js/app.js frontend logic
An authorized operator checkout can additionally contain these private, ignored tool implementations:
cmd/agent/ measurement-node service
cmd/mrt2json/ offline MRT-to-BGP-JSON converter
cmd/geoipbuilder/ offline GeoIP builder, validator, and publisher
Those cmd/ implementations are intentionally absent from the public GitHub
checkout. Public documentation describes their roles and operational
interfaces without distributing their source or adding placeholder files.
The complete web/ tree is embedded through //go:embed web. Frontend source
changes therefore require a Master rebuild and restart before they are served.
The detailed private-tool and filesystem/data-role maps are in
INSTALL.md.
- Go 1.22+
- Master node: 4 6790 + cores, 8+ GB RAM
- Agent nodes: 2+ cores, 4+ GB RAM
- Debian 13 or Ubuntu 24.04
- INSTALL.md — build, deploy, nginx, systemd, fail2ban
- docs/ARCHITECTURE.md — system design and decisions
- docs/API.md — HTTP API reference
- docs/bgp-data.md — MRT format, conversion, update process
- docs/GeoIp.md — offline canonical workflow and runtime loading
- CONTRIBUTING.md — adding nodes, contributing patches
- CHANGELOG — version history
- SECURITY.md — reporting vulnerabilities
GNU Affero General Public License v3.0 — see LICENSE.