sonnora@systems:~/projects/rscout$ cat README
A Rust network scanner that goes beyond a ping sweep. rScout correlates signals from several protocols at once to work out what's actually on your network — including devices that go out of their way to hide it.
// the problem
Modern devices — Android phones especially — randomize their MAC address, which breaks the simplest way of telling one device from another over time. Any single signal (an open port, a hostname, a MAC prefix) is easy to spoof, miss, or misread on its own.
rScout treats device identification as a scoring problem, not a lookup. It gathers several independent signals per device and runs them through a candidate-scoring framework, so a weak or missing signal in one source doesn't sink the whole identification.
// signal sources
Reads device-advertised service announcements — often the fastest way to spot smart-home and media devices on the segment.
Picks up local service discovery broadcasts, a strong signal for Apple hardware and many IoT devices.
Matches the manufacturer prefix against known vendor ranges — useful, but treated as a hint rather than ground truth given MAC randomization.
Pulls the hostname a device announces when requesting an address — often the most human-readable signal of the four.
// interface
The terminal UI runs on a custom rendering engine with independently scrollable panes, driven through crossterm. One pane tracks live discovery; the other holds the classifier's running log.
// under the hood
Raw signals move through a classifier/enricher pipeline before anything reaches the UI — enrichment adds context (vendor, service type, likely role), classification turns that into a device identity with a confidence level.
A full pass through the codebase surfaced and fixed dead classification branches, mDNS service-type mismatches, and bugs in both the mDNS/Bonjour collector and the SSDP enricher — the kind of correctness work that doesn't show up in a feature list but decides whether the results can be trusted.
The alternate-screen terminal buffer had a corruption bug under certain resize sequences — tracked down and fixed at the rendering-engine level rather than papered over in the UI layer.
// connect
Get in touch about access, deployment, or extending it for a specific device landscape.