Back to projects

// personal project

Personal

Clockwork

PythonTextualTailscalemDNSNetworking

Clockwork answers a recurring home-lab question — what is actually on this network — by merging two sources into a single Textual table. On the local LAN it runs an unprivileged ping sweep of the surrounding /24, then reads the ARP cache for live neighbors, resolving names over mDNS/Bonjour with reverse DNS as a fallback since most home networks have no PTR records. In parallel it reads the full tailnet from tailscale status --json, covering nodes reachable from anywhere.

Devices are tagged by source, so a machine can legitimately appear twice under its LAN and its 100.x Tailscale address. Every device with a MAC gets a vendor resolved offline from its OUI against a bundled copy of the IEEE registry, with privacy-randomized MACs flagged as such. If the Tailscale CLI is missing or logged out, it degrades to LAN-only and says so in the footer. No sudo required.

Key Highlights

  • Merges LAN ARP/ping-sweep discovery with the Tailscale mesh in one table
  • Unprivileged discovery — no sudo, ping sweep plus ARP cache
  • Names resolved via mDNS/Bonjour with reverse DNS fallback
  • Offline MAC vendor lookup from a bundled IEEE OUI registry
  • Degrades gracefully to LAN-only when Tailscale is unavailable