Tech Specs / Detection

Reachability detection

ProbeScope determines whether a host is up or down using a layered probing strategy, a consecutive-result threshold to suppress flapping, and a method-learning cache to keep steady-state overhead low.

Probing methods, tried in order

For a host with no explicit modifier, each ping attempt tries, in order:

  1. Privileged ICMP — a raw ICMP socket (needs root, or CAP_NET_RAW on Linux).
  2. Unprivileged ICMP — a datagram-based ICMP socket, no elevated privileges needed on most platforms.
  3. TCP — connects to port 443 by default (or a per-host explicit port, see below); a completed TCP handshake counts as a successful probe.

Detection stops at the first method that succeeds. This chain runs automatically — you don't choose a method, ProbeScope discovers what works and remembers it (see "Method-learning cache" below).

Per-host modifiers

A host token can carry an explicit suffix to override the default chain:

Method-learning cache

Each host remembers the last method that worked and tries it first on the next round, skipping the earlier steps in the chain. This is a preference, not a lock: a run of consecutive failures on the cached method (up to --threshold-down rounds) expires the hint, and the full chain runs again so a different working method can be rediscovered. In steady state with no root privileges, this roughly halves the socket operations per host per second compared to re-trying privileged ICMP every round.

Threshold-based up/down state

A single failed or successful ping never flips a host's displayed state on its own — that would make the display flap on ordinary packet loss. Instead:

This debounced state (MonitorUp) is what drives the TUI's up/down coloring, the web console, and --db/--logging period records. The raw, non-debounced result of the most recent ping is also tracked separately and available to plugins (last_ok), so a rule can see flakiness the threshold is specifically designed to hide from the main display.

ProbeScope terminal showing echo fast/laggy/reject/silent test hosts, with 'maybe' variants surviving intermittent failures below the threshold
reject/silent cross the threshold immediately; laggy/slow 'maybe' hosts don't

Detection latency is asymmetric, by nature of the probe itself

Confirming a host is down costs more wall-clock time than confirming it's up: a successful ping resolves in real round-trip time (often milliseconds), but a single failed ping can't be recognized as failed until the full --timeout elapses — there's no way to know a reply isn't coming until you've waited long enough for one. With default settings (1s interval, 3/3 threshold), that means roughly 6 seconds to confirm a host down versus roughly 2 seconds to confirm it back up. Lowering --timeout closer to --interval (tier-dependent — see the pricing page) narrows this gap.

Interface binding

--interface en0 pins every ping to a specific network interface's source IP. Without it, the OS routing table picks the interface. The default-route interface is still auto-detected and shown in the title bar/web console for situational awareness, whether or not it's the one actually pinned.

Related

  • Interface Flapping — detecting your local network interface itself going up/down, not just remote hosts.
  • History — every threshold-confirmed up/down transition, with duration, can be persisted to SQLite via --db.
  • Plugins — write custom logic against the same debounced state, plus the raw per-ping history the threshold hides.