NetPulse is a production-grade network monitoring tool built entirely with Go standard library. One static binary, no configuration files required, no runtime dependencies.
Deploy it in seconds on any Linux system including QNAP NAS.
Features
Real-time Network Monitoring
- Continuous ICMP ping every 3 seconds — avg / min / max / jitter / packet loss / uptime
- 120-point rolling history per host, persisted and restored across restarts
- Automatic subnet discovery from network interfaces, configurable from UI at runtime
- ARP table MAC address resolution via
/proc/net/arp
Intelligent Alerting
- Adaptive baseline per host — learns each device’s normal latency (30-sample warmup, 500-sample window), alerts at
mean + 2.5σinstead of fixed 150ms - Three alert types — host down / high latency / packet loss
- Timestamped incident log — persisted to
netpulse.events.jsonl, restored on restart - Alert sound (Web Audio API) — distinct tones for DOWN vs HIGH LATENCY, toggle 🔔/🔕
Webhook Notifications
- POST to any HTTP/HTTPS endpoint on alert events (down, high_latency, packet_loss, recovered)
- Compatible with Ntfy, Gotify, Home Assistant, Discord, n8n
- Secret header (
X-NetPulse-Secret) for authentication - Configured from UI, persisted to
netpulse.webhooks.json
Network Diagnostics
- Integrated traceroute — per-hop latency bars, async polling
- DNS chain discovery — dnsmasq-aware: reads
/etc/dnsmasq.confto expose real upstreams behind127.0.0.1 - TCP port scanner — 71-port quick scan + 150+ port background deep scan
- HTTP title + SSH banner grab per host
- Wake-on-LAN — magic packet broadcast for hosts with known MAC
Visual Interface
- Network topology map — responsive SVG star layout, colour-coded by latency
- Latency history chart — canvas with fill gradient, loss markers, 150ms threshold line
- Multi-host overlay — up to 6 latency curves superimposed for correlation
- Heatmap 24h×7j — average latency by hour-of-day and day-of-week (green→yellow→red)
- Real-time sidebar — sorted by severity, DOM-diffed to prevent scroll jump
Per-Host Customisation (localStorage)
- Editable icon — click to open emoji picker (80+ icons, search, reset to auto-detect)
- Editable hostname — click to rename inline (Enter/Esc), affects list + map + detail
- Notes — free-text contenteditable field per host
Device Classification
Automatic detection from OUI + open ports + TTL + HTTP title + SSH banner:
| Icon | Type | Signals |
|---|---|---|
| 🔀 | Router/Gateway | Cisco/TP-Link/Ubiquiti vendor, port 80/443, title “luci”/”pfsense” |
| 🔌 | Network Switch | Network vendor, few open ports, high TTL |
| 🗄 | NAS | QNAP/Synology vendor, ports 5000/5001/22 |
| 🖧 | Virtual Machine | VMware/VirtualBox/QEMU/Hyper-V vendor |
| 📺 | Smart TV | Ports 7000/8008, title “webos”/”roku”/”tizen” |
| 🍓 | IoT / SBC | Raspberry Pi vendor, MQTT ports |
| 🏠 | Smart Home | Home Assistant/Shelly/Tasmota title |
| 📷 | IP Camera | Port 554 RTSP, Hikvision/Dahua/Axis |
| 🖨 | Printer | Ports 631/9100/515, HP/Canon/Brother |
| 📱 | Mobile | Apple/Samsung/Xiaomi, few ports, TTL ≤ 64 |
| 🖥 | Windows PC | TTL ≤ 128, RDP/SMB ports |
| 💻 | Linux | SSH banner, TTL ≤ 64 |
Export & Integration
- CSV export —
/api/export?format=csv&ip=X - JSON export —
/api/export - Prometheus metrics —
GET /metrics(latency, loss, jitter, uptime, online, ports per host) - 16 REST API endpoints
Internationalization
15 languages: English, Français, Deutsch, Español, Português, 中文, 日本語, 한국어, العربية, Русский, हिन्दी, Türkçe, Italiano, Nederlands, Polski
Security
- HTTP security headers:
X-Frame-Options: DENY,X-Content-Type-Options: nosniff,CSP,X-XSS-Protection,Referrer-Policy,Cache-Control: no-store -auth user:password— HTTP Basic Authentication-tls cert.pem:key.pem— HTTPS with any certificate (Let’s Encrypt, self-signed)- IP validation before every
exec.Command— no shell injection - SSRF prevention on HTTP banner grab
- Rate limiting: scan (5s global), rescan/traceroute/WoL (10s/IP)
- Request body capped at 64 KB
- Stale PID cleanup on startup
Runtime files (all created next to binary):
| File | Description |
|---|---|
netpulse.pid |
Process ID |
netpulse.log + .1/.2/.3 |
Rotating logs (10 MB × 3 files) |
netpulse.state.json |
Host history, heatmap, device type |
netpulse.events.jsonl |
Incident log (JSONL) |
netpulse.webhooks.json |
Webhook configuration |
API Reference
| Endpoint | Method | Description |
|---|---|---|
/api/hosts |
GET | All hosts with full stats |
/api/scan |
POST | Trigger network scan |
/api/subnets |
GET/POST | List/add/remove monitored CIDRs |
/api/rescan?ip=X |
POST | Rescan ports on host |
/api/wol?ip=X |
POST | Send Wake-on-LAN |
/api/events?limit=N |
GET | Incident log |
/api/traceroute?ip=X |
POST/GET | Async traceroute |
/api/dns |
GET | DNS servers with latency |
/api/overlay?ips=X,Y |
GET | Multi-host latency traces |
/api/heatmap?ip=X |
GET | 7×24 latency heatmap |
/api/export?ip=X&format=csv |
GET | Export CSV or JSON |
/api/webhooks |
GET/POST/DELETE | Webhook management |
/api/metrics or /metrics |
GET | Prometheus metrics |
/api/translations |
GET | i18n language packs |
Last update: 11 July 2026



