Aufraeumen vor den eigentlichen Korrekturen — ohne Verhaltensaenderung am Code. Doppelte Plugin-Quelle: Die drei Kotlin-Dateien lagen byte-identisch in native-plugin/ UND in android/app/src/main/java/de/data_it_solution/netdiag/. Gebaut wurde immer nur die Kopie unter android/ — eine Aenderung an der falschen Datei sah deshalb aus wie "der Fix wirkt nicht". native-plugin/ enthaelt jetzt nur noch die Anleitung, die auf den echten Ort verweist. Doku sagte drei Dinge, die nicht stimmen: - stresstest.ts behauptete "laeuft nativ als Foreground-Service". Tut es nicht — im Plugin steht an der Stelle nur ein Kommentar, dass man einen ergaenzen sollte. Bei ausgeschaltetem Display friert Android den Lauf ein. - iperf.ts/scanner.ts/README nannten den Durchsatztest "iperf-kompatibel". Er spricht kein iperf3-Protokoll (kein Cookie, kein Parameterblock) und scheitert gegen einen echten iperf3-Server. - ipscan.ts beschrieb sich als "ARP + Ping + Namen". Gefunden wird nur, wer auf Ping antwortet oder sich per mDNS meldet; die ARP-Tabelle wird lediglich nachgeschlagen und ist ab Android 10 meist gar nicht lesbar. Statt der falschen Zusagen stehen dort jetzt die tatsaechlichen Grenzen plus Verweis auf die Phase, die sie behebt. README: DHCP-Check und WLAN-Scan als Werkzeuge entfernt (sind nicht mehr in tools/index.ts registriert, tauchen aber in alten Protokollen noch auf). Geprueft: vite build ok, svelte-check 0 Fehler (2 vorbestehende Warnungen). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
83 lines
4.2 KiB
Markdown
83 lines
4.2 KiB
Markdown
# Natives Scan-Plugin `NetDiagScanner`
|
|
|
|
Der WebView kann keine Raw-Sockets/ICMP/ARP — die eigentliche Netzwerk-Messung
|
|
läuft in einem nativen Android-Plugin (Kotlin).
|
|
|
|
## Wo der Code liegt
|
|
|
|
**Einzige Quelle:**
|
|
|
|
```
|
|
android/app/src/main/java/de/data_it_solution/netdiag/
|
|
├── NetDiagScannerPlugin.kt Capacitor-Plugin mit allen Scan-Methoden
|
|
├── MonitorService.kt Vordergrund-Dienst des Geräte-Monitors
|
|
├── Snmp.kt minimaler SNMP-v2c-GET-Client
|
|
└── MainActivity.kt registriert das Plugin
|
|
```
|
|
|
|
> **Bis 08/2026 lagen dieselben Dateien zusätzlich hier im Ordner `native-plugin/`.**
|
|
> Gebaut wurde aber immer nur die Kopie unter `android/` — eine Änderung an der
|
|
> falschen Datei sah deshalb aus wie „der Fix wirkt nicht". Die Doppelablage ist
|
|
> aufgelöst; dieser Ordner enthält nur noch diese Anleitung.
|
|
|
|
Das Verzeichnis `android/` liegt vollständig im Repo (Kotlin, Manifest, Gradle,
|
|
Signing-Config sind dort fest eingerichtet). `npx cap sync android` kopiert nur die
|
|
Web-Assets hinein und aktualisiert die Plugin-Liste — es überschreibt **keinen**
|
|
nativen Code.
|
|
|
|
## Ein neues Plugin-Kommando ergänzen
|
|
|
|
1. Methode in `NetDiagScannerPlugin.kt` mit `@PluginMethod` anlegen.
|
|
2. Im TS-Wrapper `src/lib/scanner.ts` die Signatur ergänzen (inkl. Browser-Mock,
|
|
sonst lässt sich die Seite im Dev-Server nicht mehr bedienen).
|
|
3. Werkzeug unter `src/lib/tools/<kategorie>/` anlegen und in `tools/index.ts` eintragen.
|
|
|
|
## Erstmalige Einrichtung (nur relevant, wenn `android/` neu erzeugt wird)
|
|
|
|
Normalerweise **nicht nötig** — `android/` ist eingecheckt. Falls doch:
|
|
|
|
1. `npm install && npx vite build && npx cap add android`
|
|
2. Kotlin-Dateien nach `android/app/src/main/java/de/data_it_solution/netdiag/` legen
|
|
3. Plugin in `MainActivity.kt` registrieren:
|
|
```kotlin
|
|
class MainActivity : BridgeActivity() {
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
registerPlugin(NetDiagScannerPlugin::class.java)
|
|
super.onCreate(savedInstanceState)
|
|
}
|
|
}
|
|
```
|
|
4. **`kotlin-android` im Gradle-Build aktivieren** — sonst werden die `.kt`-Dateien
|
|
stillschweigend ignoriert, der Build ist grün und das Plugin fehlt im APK
|
|
(„plugin is not implemented on android", siehe KB #660).
|
|
5. Berechtigungen im `AndroidManifest.xml` (Stand heute):
|
|
```xml
|
|
<uses-permission android:name="android.permission.INTERNET" />
|
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
|
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
|
|
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
|
|
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
|
|
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
|
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
|
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />
|
|
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
|
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
|
|
```
|
|
`ACCESS_FINE_LOCATION` ist Pflicht, damit Android WLAN-Scan-Ergebnisse liefert.
|
|
|
|
## Bekannte Einschränkungen
|
|
|
|
- **ARP/MAC**: `/proc/net/arp` ist ab Android 10 in der Regel nicht mehr lesbar —
|
|
dann bleiben MAC und Hersteller leer. Das ist der Grund, warum in den bisherigen
|
|
Kunden-PDFs die Spalten MAC/Hersteller leer sind.
|
|
- **Hersteller-Lookup**: nur kleiner OUI-Auszug eingebaut. Für volle Abdeckung die
|
|
IEEE-OUI-Datei als Asset einbinden und in `ouiVendor()` nutzen.
|
|
- **Durchsatz-Test**: spricht **kein** iperf3-Protokoll, sondern schreibt/liest roh
|
|
auf einen TCP-Socket. Gegen einen echten iperf3-Server schlägt er fehl; er braucht
|
|
eine schlichte TCP-Sink/Source-Gegenstelle. Umbau steht in
|
|
`../../ROADMAP_UMSETZUNG.md` (Phase 1).
|
|
- **Stresstest**: läuft **nicht** in einem Foreground-Service — bei ausgeschaltetem
|
|
Display friert Android den Lauf ein. Umbau in Phase 2.
|
|
- **IP-Konflikt-Prüfung**: hängt an der ARP-Tabelle und ist damit auf aktuellen
|
|
Android-Versionen praktisch nicht durchführbar.
|
|
- **PoE-/Strommessung**: bewusst nicht enthalten (Hardware-Grenze) — späteres Modul.
|