Some checks failed
Build APK / build-apk (push) Failing after 11m29s
SvelteKit + Capacitor 6 Netzwerk-Diagnose-App: - Tool-Plattform (IP-Scan, Port, Ping, WLAN, DHCP, SNMP, Traceroute, Stresstest, iperf) - Offline-First SQLite-Cache + idempotenter Dolibarr-Sync - Natives Kotlin-Plugin NetDiagScanner (ARP, Ping, Ports, WLAN, DHCP, SNMP, Traceroute) - Backbutton-Single-Instance-Modul, Auto-Updater, Toast-System - Auftrags-/Kunden-Übersicht nach Baustellen-App-Muster - CI: [apk]-Tag → Forgejo Runner → Package Registry netdiag-apk Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
72 lines
2.8 KiB
Markdown
72 lines
2.8 KiB
Markdown
# Natives Scan-Plugin `NetDiagScanner`
|
|
|
|
Der WebView kann keine Raw-Sockets/ICMP/ARP — die eigentliche Netzwerk-Messung
|
|
läuft in diesem nativen Android-Plugin (Kotlin).
|
|
|
|
## Dateien
|
|
|
|
- `NetDiagScannerPlugin.kt` — Capacitor-Plugin mit allen Scan-Methoden
|
|
- `Snmp.kt` — minimaler SNMP-v2c-GET-Client
|
|
|
|
## Integration (einmalig, nach `npx cap add android`)
|
|
|
|
1. **Android-Projekt erzeugen** (falls noch nicht vorhanden):
|
|
```bash
|
|
npm install
|
|
npm run build
|
|
npx cap add android
|
|
```
|
|
|
|
2. **Plugin-Dateien kopieren** nach:
|
|
```
|
|
android/app/src/main/java/de/data_it_solution/netdiag/
|
|
├── NetDiagScannerPlugin.kt
|
|
└── Snmp.kt
|
|
```
|
|
|
|
3. **Plugin registrieren** in `android/app/src/main/java/de/data_it_solution/netdiag/MainActivity.kt`:
|
|
```kotlin
|
|
package de.data_it_solution.netdiag
|
|
|
|
import android.os.Bundle
|
|
import com.getcapacitor.BridgeActivity
|
|
|
|
class MainActivity : BridgeActivity() {
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
registerPlugin(NetDiagScannerPlugin::class.java)
|
|
super.onCreate(savedInstanceState)
|
|
}
|
|
}
|
|
```
|
|
|
|
4. **Berechtigungen** in `android/app/src/main/AndroidManifest.xml` (innerhalb `<manifest>`):
|
|
```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.ACCESS_FINE_LOCATION" />
|
|
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
|
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
|
|
```
|
|
`ACCESS_FINE_LOCATION` ist Pflicht, damit Android WLAN-Scan-Ergebnisse liefert.
|
|
|
|
5. **Kotlin-Coroutines** sicherstellen — in `android/app/build.gradle`:
|
|
```gradle
|
|
dependencies {
|
|
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.0"
|
|
}
|
|
```
|
|
|
|
## Bekannte Einschränkungen
|
|
|
|
- **ARP/MAC**: `/proc/net/arp` ist ab Android 10 teils nicht mehr lesbar — dann
|
|
bleiben MAC/Hersteller leer; Geräte werden trotzdem über Ping/Hostname erkannt.
|
|
- **Hersteller-Lookup**: nur kleiner OUI-Auszug eingebaut. Für volle Abdeckung
|
|
die IEEE-OUI-Datei als Asset einbinden und in `ouiVendor()` nutzen.
|
|
- **DHCP-Discover**: Best-effort — Port 68 kann vom System-DHCP-Client belegt sein.
|
|
- **Durchsatz-Test**: benötigt eine TCP-Sink/Source-Gegenstelle (2. Gerät bzw.
|
|
iperf3-kompatibler Server). Misst sonst nur Fehlversuche.
|
|
- **Stresstest**: für lange Läufe sollte ein Foreground-Service ergänzt werden,
|
|
sonst kann Android den Prozess im Hintergrund beenden.
|
|
- **PoE-/Strommessung**: bewusst nicht enthalten (Hardware-Grenze) — späteres Modul.
|