Evidence-based local discovery

A responsive IP is only the beginning. Useful identification requires multiple probes, bounded concurrency, and an honest confidence model.

Source baseline: app 1.0.1 (3) · 14 August 2026

Two-phase scan pipeline

The Flutter app first performs preflight to identify the active network, phone address, gateway, and candidate CIDR. Discovery finds responsive hosts; fingerprinting then gathers deeper evidence only for those hosts. Results stream to the UI as each device row becomes available.

Fast and balanced profiles16 concurrent host tasks, 8 concurrent fingerprint tasks
Per-probe timeout1.2 seconds fast; 1.8 seconds balanced and accurate
Accurate profileAdds HTTP content analysis
CancellationShared cancel token stops new work and progress publication

Multiple discovery sources

TCP liveness checks run alongside UDP and native reachability work so one silent protocol does not erase a real device. The scanner merges evidence by IP and keeps protocol-only responders inside the requested CIDR.

Evidence before labels

Classification consumes a probe summary rather than one port number. It combines open ports, banners, HTTP signatures, host names, MAC OUI, gateway identity, SSDP and mDNS metadata, printer records, media records, and vendor-specific industrial responses.

Confirmed and candidate are different product states. A device type is confirmed only when the evidence contract is strong enough; otherwise the UI preserves uncertainty instead of presenting a guess as fact.

Each row carries localized evidence text alongside its kind and confidence. This makes a wrong classification diagnosable and allows future rules to be tested against the same input facts.

Resource and privacy boundaries

Concurrency is bounded at both discovery and fingerprint stages. The fast profile's initial TCP fan-out is capped rather than multiplying every host by every port at once. Printer and content probes have separate smaller limits.

Verification and known limits

Tests cover CIDR enumeration, bounded pools, cancellation, protocol parsers, OUI lookup, device models, classification rules, export, session persistence, and UI progress.