A local, personal node/peer dashboard similar to etcnodes.org, but built for your own machine. It discovers peers only from legitimate protocol sources (bootnodes + discovery + peers), stores them in SQLite, and renders a local dashboard on http://localhost:8088.
- Local crawler node (no scanning, no brute force)
- Collector/API on
http://127.0.0.1:9090 - Dashboard on
http://127.0.0.1:8088 - GeoIP (Country + ASN) via MaxMind GeoLite2
.mmdb - Export enodes as TXT/JSON/CSV
- IP masking (default ON) with a UI toggle
- Windows 10/11
- Node.js 20 LTS (
node -v) - Ethernova node binary (path configured in
config\app.config.json) - Bootnodes provided by you (do not invent)
- GeoLite2 databases (optional but recommended)
Download GeoLite2 Country + ASN from MaxMind and place them here:
C:\dev\ethernova-node-explorer\geoip\GeoLite2-Country.mmdb
C:\dev\ethernova-node-explorer\geoip\GeoLite2-ASN.mmdb
If the files are missing, the app will show UNKNOWN instead of crashing.
Edit config\app.config.json:
nodeBinaryPath: path toethernova.exenodeStartBatPath: optional path to a.batthat starts the node (overridesnodeBinaryPath)nodeStartBatArgs: optional args array passed to the.batrpcUrl: must behttp://127.0.0.1:8545(or another local port)apiPort: collector API port (default 9090)webPort: dashboard port (default 8088)p2pPort: P2P port (default 30303, TCP+UDP)maxPeers: default 200pollSeconds: collector poll intervalonlineWindowMinutes: window for "online" statusdatadir: node data directorylogDir: log directorygeoipCountryMmdb/geoipAsnMmdb: MaxMind DB pathsenableExpansion: optional feature flag (default false)autoExportEnabled: generate freshbootnodes.txt+static-nodes.jsonon a scheduleautoExportMinutes: export interval in minutes (default 30)autoExportLimit: max enodes to write (default 200)autoExportOnlyOnline: only nodes seen within the online window (default true)autoExportBootnodesPath: output path forbootnodes.txtautoExportStaticNodesPath: output path forstatic-nodes.json
Bootnodes go in config\bootnodes.txt (one enode per line, # comments allowed). See config\README-BOOTNODES.md.
If autoExportEnabled=true, the collector will overwrite bootnodes.txt and create static-nodes.json at the configured paths every interval. Existing bootnodes are preserved and fresh enodes are appended (deduped and capped by autoExportLimit).
If nodeStartBatPath is set, start-node.ps1 runs that .bat and does not add the default CLI flags. Make sure your bat/script enables the admin RPC (--http.api eth,net,web3,admin) and uses the right bootnodes/config.
To see the dashboard from other devices on your local network:
- Set
webHostto0.0.0.0andapiProxyEnabledtotrueinconfig\app.config.json. - Open the Windows Firewall port for
webPort(default 8088). You can run.\scripts\firewall-rules.ps1as Administrator. - Open
http://<PC-LAN-IP>:8088from another device.
RPC stays bound to 127.0.0.1 only.
When enableExpansion=true, the collector will enqueue newly seen enodes and call admin_addPeer with a strict rate limit and backoff. It never attempts IPs outside what was learned from peers/bootnodes.
- Edit
config\app.config.json - Edit
config\bootnodes.txt - Start everything:
.\scripts\start-all.ps1
- Open
http://localhost:8088
.\scripts\stop-all.ps1
curl http://localhost:9090/api/health
curl http://localhost:9090/api/stats
.\scripts\export-enodes.ps1 -Format txt
.\scripts\export-enodes.ps1 -Format json
.\scripts\export-enodes.ps1 -Format csv
Port 30303 must allow both TCP and UDP. Run as Administrator:
.\scripts\firewall-rules.ps1
- RPC is bound to
127.0.0.1only. Do not expose it publicly. - If you later expose the dashboard to LAN, keep RPC on localhost only.
- Discovery uses bootnodes + peers only. No scanning or brute force.
- The dashboard is local; IP masking is enabled by default.
- Peers = 0: bootnodes missing/wrong, UDP blocked, firewall not open, ISP NAT issues.
- Admin method missing: ensure the node starts with
--http.api eth,net,web3,admin. - GeoIP UNKNOWN: verify
.mmdbpaths in config and files exist. - Ports in use: change
apiPortorwebPortin config. - Logs: review
logs\for node and collector output.
scripts\start-all.ps1: validates Node.js, installs deps if missing, starts node + dashboardscripts\start-node.ps1: starts ethernova node (RPC bound to localhost)scripts\start-dashboard.ps1: starts collector + web UIscripts\stop-all.ps1: stops processes from PID filesscripts\export-enodes.ps1: exports enodes to data directoryscripts\firewall-rules.ps1: adds Windows firewall rules for TCP/UDP P2P