Construire NetScan : ce que Android ne vous dit pas sur les scanners réseau Building NetScan: what Android doesn't tell you about network scanners
NetScan est parti d'un besoin simple : savoir ce qui est réellement connecté sur mon réseau Wi-Fi, sans dépendre d'un outil qui collecte des données ou qui ne fonctionne qu'en abonnement. Ce qui semblait être un week-end de développement s'est transformé en une vraie plongée dans les restrictions d'Android — voici ce que j'en retiens.
Le scan réseau n'est pas fiable comme on l'imagine
La première version tentait un simple ping/isReachable()
pour détecter les appareils actifs. Résultat : à peu près tout répondait
"présent", même des IP qui n'existaient pas. Il a fallu passer à un
sondage TCP pur, avec une distinction stricte entre "connexion acceptée"
(appareil confirmé) et "connexion refusée" (souvent juste du bruit d'un
routeur saturé par le scan lui-même).
L'adresse MAC a disparu — pour de bon
Depuis Android 10, aucune application ne peut lire la table ARP du système, quel que soit le téléphone. C'est une restriction Google, pas une limite de NetScan — et ça veut dire qu'aucun scanner réseau sur le Play Store ne peut légitimement afficher fabricant ou adresse MAC sans root. Plutôt que de contourner ou d'inventer une info, NetScan l'affiche honnêtement : "Fabricant inconnu".
Le bug le plus tenace : une simple boîte de dialogue
En ajoutant le support bilingue français/anglais, une boîte de dialogue
de l'app refusait obstinément de changer de langue — jusqu'à provoquer
un vrai plantage (IllegalStateException: No ActivityResultRegistryOwner).
La cause : Compose ouvre les boîtes de dialogue dans une fenêtre séparée
qui n'hérite pas correctement du contexte utilisé pour appliquer la
langue choisie. La correction a fini par tenir en une ligne — mais
identifier la cause exacte a demandé un vrai rapport de plantage, pas
juste des suppositions.
Ce qui reste vrai pour la suite
- Rester honnête sur les limites plutôt que de les masquer
- Tout traiter en local — aucune donnée qui sort du téléphone
- Un bug reproductible avec un vrai rapport vaut mieux que dix suppositions
NetScan est disponible sur le Play Store — voir la page dédiée.
NetScan started from a simple need: knowing what's actually connected to my Wi-Fi network, without relying on a tool that collects data or only works behind a subscription. What looked like a weekend project turned into a real deep dive into Android's platform restrictions — here's what stuck with me.
Network scanning isn't as reliable as you'd think
The first version tried a simple ping/isReachable()
call to detect active devices. Result: almost everything came back
"present," even IPs that didn't exist. I had to switch to raw TCP
probing, with a strict distinction between "connection accepted"
(confirmed device) and "connection refused" (often just noise from a
router overloaded by the scan itself).
The MAC address is gone — for good
Since Android 10, no app can read the system's ARP table, on any phone. That's a Google restriction, not a NetScan limitation — meaning no network scanner on the Play Store can legitimately show vendor or MAC address without root. Rather than fake it, NetScan shows it honestly: "Unknown vendor."
The most stubborn bug: a simple dialog box
While adding French/English bilingual support, one dialog in the app
stubbornly refused to switch language — eventually causing a real
crash (IllegalStateException: No ActivityResultRegistryOwner).
The cause: Compose opens dialogs in a separate window that doesn't
correctly inherit the context used to apply the chosen language. The
fix ended up being one line — but pinning down the exact cause took an
actual crash report, not just guesses.
What still holds going forward
- Stay honest about limitations instead of hiding them
- Process everything locally — no data ever leaves the phone
- A reproducible bug with a real report beats ten guesses
NetScan is available on the Play Store — see the dedicated page.