> Dieser übersetzte Text wird sprachlich überarbeitet. Vergleichen Sie unklare Stellen mit dem [englischen Original](https://www.sm.ch-j.eu/docs/i18n/en/server-diagnostics.md). # Serverdiagnose In die Core Sidebar integriert, in der Reihenfolge Plugins → Server Diagnostics → Hash & Checksum. Es erfordert keine SSH Sitzung oder heruntergeladen Plugin. Alle Laufzeitcodes, Tests und Fixtures leben in `app/`; das Modul hat keine Abhängigkeit von Geschwister-Repositorien. Das Projektarchiv hat kein `doc.md`, daher beschreiben dieses Dokument und beide READMEs die Implementierung. ## Benutzer-Workflow Geben Sie einen Hostnamen ein. IPv4, IPv6 oder HTTP(S)/WS(S) URL. Bare hostnames/IPs default to HTTPS; explizite URLs behalten während der Anfrage ihren Pfad, ihre Abfrage und ihren Port. Anmeldeinformationen in URLs, nicht unterstützten Schemata, Whitespace/Control-Zeichen und Shell-ähnlichen Hostnamen werden abgelehnt. IPv6-Literaturen werden automatisch geklammert; scoped/link-local Zone Identifier werden vom URL Parser nicht unterstützt. Wählen Sie Auto (vorzugsweise IPv4, sonst IPv6), IPv4 oder IPv6. Lösen Sie Adressen, um eine bestimmte aktuelle Antwort zu wählen. Die Übersicht zeigt alle gelösten Antworten an; Sonden testen die ausgewählte Adresse oder eine Adresse pro angeforderter Familie. Beide Familien werden unabhängig voneinander gemessen. AAAA-Präsenz allein impliziert nie, dass IPv6-Konnektivität funktioniert. Führen Sie Diagnose läuft DNS, ping, traceroute, HTTP, Kompression, TLS und die ausgewählten TCP-Ports. WebSocket ist Opt-in. Jedes Tool hat auch eine separate Run/Stop-Steuerung. Ein Diagnoselauf kann sofort aktiv sein. Ein abgeschlossener Lauf bedeutet, dass die Werkzeuge fertig sind, nicht dass jede Sonde erfolgreich war. Es gibt keine decke .server offline-Urteil. Timeout, Paketanzahl, Wiederholungen, maximale Hops, DNS-Resolver, Protokollauswahl, warme Verbindung und HTTP/HTTPS-Vergleich sind konfigurierbar. Das Ändern des Ziels löscht eine zuvor ausgewählte IP. Die Historie kann zwei Berichte erneut öffnen, vergleichen, löschen, JSON importieren, JSON/CSV/TXT durch native Core-Dialoge kopieren oder exportieren. Das Light/dark/system-Theme gilt für den Diagnosebereich und wird in der bestehenden UI-Konfiguration gespeichert. CZ/DE/EN folgt der Anwendungssprache sofort. ## Komponenten und Protokollverhalten | Komponente | Implementierung und Interpretation | | --- | --- | | `common.js`Z| Validiert Ziele/Optionen, Grenzwerte und Enum-Werte; IDNA-Konvertierung; numerische Statistiken schließen unbekannte Werte aus. | | `dnsDiagnostics.js` | System-Adressauflösung verwendet `dns.lookup` um die OS-Konfiguration und Hosts zu ehren. Record-Abfragen verwenden begrenzt UDP DNS mit TCP Fallback für verkürzte Antworten gegen `dns.getServers()`, oder den explizit gewählten Custom/public Resolver. Keine implizite Umstellung auf öffentliche DNS. | | `processTools.js` Die | führt OS ping/traceroute mit einem argumentaren Array und `shell: false`, begrenzter Ausgabe, explizitem Timeout und Abbruch/Kill-Reinigung aus. Parses Paket antwortet und hops, anstatt Prozessdauer als RTT zu behandeln. | | `httpDiagnostics.js` | Gebundene Locke für HTTP/1.1, HTTP/2 und HTTP/3; strenge Zertifikatsverifizierung und IP-Familie. Jede Version wird unabhängig angefordert; die aktuelle Version wird aufgezeichnet. | | `socketDiagnostics.js`Z | Explizite TLS-Versionssonden, geschränkte TCP-Verbindungen/passive Banner, Vorab-Authentifizierung SSH Host-Key-Beobachtung über die bestehende ssh2-Abhängigkeit und optionale RFC 6455 Upgrade-Validierung. | | `diagnosticsService.js` Das | läuft und storniert Werkzeuge, wählt/validiert Adressen, streamt Fortschritt, bewahrt Teilmessungen und besitzt die Laufzeitfrist. | | `historyStore.js` | Versionierte begrenzte lokale Geschichte, Redaktion, schema-kontrollierte Importe und Messdatenexporte. | ### ICMP und Routen Ping-Standards für vier individuell ausgeführte ICMP-Echo-Anfragen. Die Ergebnisse enthalten pro Packung gemessene RTT, empfangene/gesendete Zählungen, Verlust, min/average/max, Populationsstandardabweichung, mittlere absolute Differenz zwischen aufeinanderfolgenden gemessenen RTTs (Jitter), TTL/Hop Limit beim Drucken und Zeitstempeln. Eine `<1 ms`-Antwort wird als empfangen mit einer oberen Grenze gezählt, anstatt eine numerische RTT zu erfinden. Unbekannte RTTs sind von der Latenzstatistik ausgeschlossen. Statistiken verwenden das beibehaltene Fenster von höchstens 500 Paketen; gesendet/received/loss Zählungen decken den gesamten Lauf ab. Die Graphiken zeigen die letzten 200-Beobachtungen mit unterschiedlichen Symbolen für Antworten, Subauflösungsantworten, fehlenden Antworten und expliziten Anforderungs-/Prozess-Timeouts. Eine fehlende Antwort kann ICMP-Filterung, Paketverlust oder Timeout widerspiegeln; diese Beobachtungen können eine Firewall nicht abschließend identifizieren. Fehlende ausführbare Dateien, lokale Berechtigungsausfälle und ungültige Werkzeugaufrufe sind separate Tool-Fehler, nicht Paketverlust oder Server-Unverfügbarkeit. Es wird keine Privilegisierungseskalation verlangt. Traceroute strömt Hopfen, Adressen, einzelne Sonden, Mittel und beobachtete unbeantwortete Probenprozentsätze. Der Reverse DNS wird nach der Route mit dem ausgewählten Resolver aufgelöst. Wiederholungen vergleichen beobachtete Hop-Adress-Sequenzen; Unterschiede können Lastausgleich widerspiegeln. Unbeantworteter Zwischenhopfen stellt keine kaputte Route dar. Rohe Sonde Metadaten und Methode erscheinen in erweiterbaren Details. macOS benötigt Integer-Sekunde Traceroute wartet; der effektive abgerundete Timeout wird aufgezeichnet. ### DNS Die zwölf Plattentypen sind A, AAAA, CNAME, MX, NS, TXT, SOA, SRV, CAA, PTR, DS und DNSKEY. DNS Wire Parsing überprüft Transaktion/Frage Identität, Datensatzgrößen, Kompressions-Pointer-Schleifen und Nachrichtengrenzen. Die Antworten behalten die Aufzeichnung von TTLs, Abfragetiming, Resolver und NXDOMAIN/NODATA/SERVFAIL/refused/timeout-Zuständen. OS-Adressen-Suchen können TTL nicht liefern; die separate Datensatzabfrage kann. CNAME folgt auf acht Verbindungen mit Zykluserkennung begrenzt. Konsistenz wiederholt A/AAAA-Antworten des ausgewählten Resolvers und führt vorausbestätigte PTR für IP-literale DNS-Tests durch. Veränderte Antworten sind Beobachtungen, kein Beweis eines DNS-Fehlers. Abfragen für SRV verwenden den Zielnamen wie angegeben; geben Sie bei Bedarf einen Dienstnamen wie `_service._tcp.example.org` ein. DNSSEC ist immer **not validiert**. DS/DNSKEY-Präsenz und sogar die AD-Flagge eines Resolvers werden nie als unabhängige Validierung behandelt. ### HTTP, Leistung und Kompression HTTP/1.1 akzeptiert diese Version nur als unterstützt, wenn sie tatsächlich zurückgegeben wurde. HTTPS HTTP/2 erfordert verhandeltes h2; kein Fallback wird neu markiert. Cleartext HTTP/2 verwendet Vorkenntnisse, keine HTTP/1.1 Upgrade-Sonde. Die TLS-Verifikation bleibt für jede HTTP/WebSocket-Anfrage streng. Manuelle Umleitungen sind auf acht begrenzt; Loops, ungültige Ziele und übermäßige Umleitungen scheitern explizit. Die komplette Kette zeichnet domänenübergreifende Änderungen auf und HTTPS-Downgrades; Schemata und www-Änderungen sind in den URLs der Quelle/destination sichtbar. Beglaubigungen und Nicht-HTTP(S)-Umleitungsregelungen werden abgelehnt. Jede Cross-Host-Umleitung wird unabhängig über den ausgewählten Resolver und die angeforderte IP-Familie aufgelöst. Zu den Messungen gehören DNS (wenn durchgeführt), TCP, TLS, final-response TTFB, insgesamt TTFB einschließlich DNS/Redirects, Download, Redirect und Gesamtwandzeit, tatsächliche Entity Bytes, Übertragungsgeschwindigkeit, Status, Response Header, aktuelle Serveradresse/Port, ALPN und verifizierte Verbindungswiederverwendung. DNS/TCP/TLS Phasen, die nicht an einer gepinnten oder wiederverwendeten Verbindung durchgeführt werden, sind `N/A`, keine gefälschten Nullen. QUIC hat keine TCP-Phase; sein Handshake wird separat aufgezeichnet. Header-Übertragung oder Volldraht Overhead wird nicht als Entity-Byte-Messung behauptet. Dies sind Server/Netzwerk Timings, nicht Seitenrendering oder Lighthouse Punkte. Jedes ausgewählte Protokoll verwendet das gleiche Ziel und Wiederholungen. IPv4/IPv6 und HTTP/HTTPS sind explizite Vergleichsoptionen. Das alternative Schema verwendet seinen Standardport. Jedes Protokoll startet einen unabhängigen gebündelten Client-Prozess pro Sample. Die Wiederverwendung der Verbindung wird nicht behauptet. Die Gesamtzeitstatistik umfasst min/average/median/max/nearest-rank P95 und eine separate Transport/Protokoll-Fehlerrate; HTTP-Statuscodes bleiben auch dann sichtbar, wenn ein Server erfolgreich eine 4xx/5xx-Antwort zurückgibt. Kompression sendet Identität, gzip, deflate, br und (wenn die Laufzeit es unterstützt) zstd als separate Accept-Encoding Anfragen. Content-Encoding muss übereinstimmen, und eine begrenzte Dekompression muss erfolgreich sein. Ein Verhältnis wird nur berechnet, wenn der dekodierte Body Hash, die endgültige URL und der Status mit dem Identitäts-Baselineal übereinstimmen. Ignorierte Kodierungen werden nicht unterstützt; wechselnde/dynamische Körper haben kein Verhältnis. Dies ist eine Beobachtung für diese URL/Status, nicht universelle Server-Unterstützung. Sicherheits-Header-Checks zeigen Vorhandensein und Wert von HSTS, CSP, X-Content-Type-Optionen, Referrer-Policy, Berechtigungs-Policie und X-Frame-Option. Eine CSP-Rahmenanzen-Direktive kann letztere ersetzen. Die Anwesenheit stellt nicht fest, dass die Richtlinie korrekt konfiguriert ist oder dass die Website sicher ist. ### HTTP/3 Anforderungen und Nachweis HTTP/1.1, HTTP/2 und HTTP/3 verwenden den gleichen gebündelten Curl-Client. macOS arm64 und Linux x64 Curl verwenden 8.22.0, OpenSSL 3.5.9== Einzelnachweise == 1.70.0, ngtcp2 1.25.0 und nghttp3 1.18.0. Windows x64 verwendet die offizielle curl.se Curl-for-win 8.22.0_3 statischen Aufbau mit LibreSSL 4.3.3 und den gleichen HTTP-Bibliotheken. Es wird keine Systemcurl-Fallback-, Laufzeit-Download- oder Administratorberechtigung benötigt. Das Windows vorgelagerte reproduzierbare Baurezept ist https://github.com/curl/curl-for-win/tree/9d77e31e . Bauen Sie mit `python3 scripts/native/build.py` (Windows: `python scripts/native/build.py`) vor der Verpackung. macOS/Linux benötigen C/C++-Tools, CMake, Ninja, Perl, make und pkg-config. Quellen werden durch die Version und vorgelagerte SHA-256 in `scripts/native/dependencies.lock.json` gepinnt. Das Skript überprüft jeden Download, verknüpft statisch Transportbibliotheken von Drittanbietern und scheitert ohne HTTP2/HTTP3/SSL-Funktionen. Nur Betriebssystem-Bibliotheken bleiben dynamisch. Windows verwendet das angepinnte offizielle Binärarchiv, nicht einen lokal kompilierten Windows Transport Stack. Die gebündelte CA-Datei verfügt über einen eigenen Pinned Hash; Komponentenlizenzen und Upstream-Build Provenance begleiten die Laufzeit. Der Client und Trust Store sind außerhalb von app.asar in `resources/native-runtime/-/` installiert. Jede Diagnose überprüft vor der Verwendung die Hische, Architektur und ausführbare Funktionen von Komponenten. Config-Dateien, Proxies, TLS Trust-Umgebungen überschreiben und Bibliotheksinjektionsvariablen sind ausgeschlossen. curl läuft mit einem absoluten Pfad, Shell deaktiviert, überprüft CA Vertrauen, eine explizite aufgelöste IP-Familie, keine Cookies, keine automatischen Weiterleitungen und begrenzt Ausgabe und Zeit. Umleitungen werden durch die Anwendung validiert und wieder aufgelöst. HTTPS auf anderen Ports als 443 wird unterstützt. HTTP/3 verwendet `--http3-only` und wird erst nach einer abgeschlossenen Übertragungsreporting-HTTP-Version 3 bestätigt. HTTP-Fehlerantworten wie 404 können das Protokoll bestätigen. Alt-Svc ist eine Werbung, kein Beweis. QUIC-Timeout, Zertifikatsfehler, DNS-Ausfall, Verbindungsverweigerung, inkompatibles Protokoll und Bauteilausfall bleiben deutlich. Ein UDP-Timeout lässt die Server-Unterstützung ungeprüft. QUIC Handshake Timing wird nicht als TCP Timing gemeldet. Jede Messung startet einen separaten Prozess/Anschluß. Die warme Option beansprucht keine Wiederverwendung der Verbindung für den gebündelten Client. Dies hält Protokollvergleiche konsistent. Berichte umfassen Laufzeitversionen, Funktionen, TLS Verifikation und QUIC Timing, während Geschichte / Export entfernen Körper, URL-Abfragen und Authentifizierung Header. Aktualisieren Sie diese Pins und bauen Sie jede unterstützte Plattform neu, wenn Sie den Transport Stack oder CA Trust Store aktualisieren. Veröffentlichte Artefakte und Quell-Snapshots sind unveränderlich. ## Kern-IPC Preload setzt nur `window.chjCore.diagnostics` aus; alle Handler behalten die bestehende Hauptfenster-Senderprüfung und Netzwerkarbeit im Hauptzustand. Die Ergebnisse verwenden `{ ok: true, value }` oder `{ ok: false, error: { code, message } }`. | Kanal / Preload Methode | Nutzlast / Ergebnis | | --- | --- | | `diagnostics:resolve` / `resolve(options)` | Validierte Ziel/Einstellungen → Ziel und aufgelöste Adressen. Höchstens zwei gleichzeitige Entschließungsanträge. | | `diagnostics:start` / `start(options)`Z| Validiertes Ziel/settings/tool Auswahl → Undurchsichtige Job-ID und Erstbericht. | | `diagnostics:cancel` / `cancel(id, tool?)` | Abbrechen Sie ein aktives/queued Werkzeug oder den gesamten Lauf. | | `diagnostics:get` / `get(id)` | Snapshot eines bekannten Run- oder gespeicherten Reports. | | `diagnostics:history` / `history()` | Zusammenfassungen der lokalen Geschichte. | | `diagnostics:removeHistory` / `removeHistory(id)`Z | Entfernen Sie den ausgewählten Historieneintrag. | | `diagnostics:copy` / `copy(id, format)` Der | Main schreibt einen reagierten bekannten Bericht in die Zwischenablage. | | `diagnostics:export` / `export(id, format)` |Z JSON/CSV/TXT über nativen Speicherdialog; Renderer kann keinen Dateisystempfad liefern. | | `diagnostics:import` / `import()` | Native Datei Picker, Größe/schema/depth Validierung und Redaktion vor dem Speichern. | | `diagnostics:progress` / `onProgress(callback)` | Behobene Adressen, Werkzeugstarts/Vervollständigungen, Pakete, Hops, HTTP-Muster und Fertigstellung; gibt einen abmeldenden Callback zurück. | Es wird keine generische Shell, Dateisystem oder Netzwerk API ausgesetzt. Kontextisolation, Sandbox, deaktivierte Knotenintegration und der vorhandene Renderer CSP bleiben aktiviert. Bestehende Plugin-Verträge und Updater-Verifizierung/Ausnahmen sind unverändert. ## Haushaltspläne und lokale Daten - Ein Lauf, zwei aktive Werkzeuge, höchstens zwei IP-Familiensonden pro Werkzeug; TCP begrenzt zusätzlich jede Adresse auf vier Verbindungen. - Per-operation timeout 250–30000 ms; 1–100 Pakete, 1–20 Wiederholungen, 1–40 Hops, 1–16 Ports. Regelmäßige Abfahrten halten bei fünf Minuten; kontinuierlicher Ping bei dreißig Minuten. Der Traceroute-Subprozess hat eine weitere 180-Sekunde-Kappe. - Prozessausgabe normalerweise 256 KiB; HTTP Entity Body 2 MiB; dekomprimierter Körper 8miB; HTTP-Header begrenzt; keine Response Bodys geben die Historie ein. - Behalten Sie höchstens 500 Pakete/Fortschritte, fünf In-Memory-Runs, dreißig History Reports und 10 MiB der Geschichte. Die Geschichte nutzt den vorhandenen privaten Atomschriftsteller bei `/diagnostics/history.json` (Mode 0600). - Die Importe sind höchstens 2 MiB, Schema 1, mit begrenzter Verschachtelung und validierten Ergebnissammlungen. CSV-Zellen sind entflohen und Formelpräfixe neutralisiert. URL-Abfragen/Fragments, Anmeldeinformationen, Cookies, Authentifizierungskopf und Rohkörper sind von den gespeicherten/copied/exported-Berichten ausgeschlossen. Rohe Details zeigen gemessene strukturierte Daten, nicht eine Paketerfassung oder einbehaltene Antwortkörper. - Keine Cloud-Synchronisation, automatische Anmeldung, Serverkonfigurationsänderungen oder aggressives/ungebundenes Scannen. Der Benutzer wählt explizit Ziel/ports/resolver. ## Anforderungen an die Plattform und Überprüfung | Plattform | ICMP | Route | Andere Protokolle | | --- | --- | --- | --- | | Windows 10/11 | `ping.exe -4/-6` | `tracert.exe -4/-6`, ICMP | Gebündelt curl.exe mit HTTP/2 und HTTP/3. Lokalisierte RTT-Felder hängen nicht vom Wort "Time" ab. | | macOS | `/sbin/ping`, `/sbin/ping6` | `/usr/sbin/traceroute`, `/usr/sbin/traceroute6`, UDP; ganze Sekunde wartet | Gebundene Locke mit HTTP/2 und HTTP/3. | | Ubuntu/Linux | Iputils `ping -4/-6`Z | Standard `traceroute -4/-6`, UDP | Bundled Curl mit HTTP/2 und HTTP/3; fehlende ICMP/Routen-Tools werden separat gemeldet. | Es wurde keine neue npm-Abhängigkeit hinzugefügt. Die Implementierung verwendet Node built-ins und die bestehende ssh2. Es installiert weder Systemtools noch verlangt es administrative Rechte. Firewalls und UDP-Einschränkungen können verhindern, dass ein Test Unterstützung herstellt; sie können nicht allein aus einem Timeout abgeleitet werden. Automatisierte Abdeckung ist in `diagnosticsCore.test.js`, `diagnosticsNetwork.test.js`, `diagnosticsHttp.test.js` und `diagnosticsIpc.test.js`: Validierung/IPv6 wörtlich, einheimisch/lokal DNS UDP+TCP-Fixtures, fehlende/duale Familienantworten und Resolverfehler, CNAME/Konsistenz, OS-Argumente/parsing-Fixturen, gebundene reale Kindprozesse, blockierte ICMP-Beobachtungen, real lokal HTTP/1.1 und TLS h2, Umleitungen/Körpergrenzen/timeouts/reuse, Kompression aktiviert/ignoriert, HTTP3 Fähigkeiten/Erfolgsergebnis-Parsing/Fallback-Abweisung, lokale CA-Vertrauen/mismatch/expiration und real IPv6 HTTP/HTTPS, TCP-Verbindung/refused/mock Timeout, echte WebSocket und SSH Prä-Authentifizierung Handshakes, Stornierung/cleanup/partial Ergebnisse, Offline-Zustand, private Geschichte Round-Trip/Import Ablehnung/Exporte, vertrauenswürdige IPC und Preload-Abonnements. `npm test` führt deterministische Tests ohne öffentliche Testserver durch. `npm run test:diagnostics:ui` läuft `scripts/smokeDiagnostics.js` in einem grafischen Electron-Desktop mit UI/preload/IPC und echten lokalen HTTP/Kompressionssonden. Unverbundene Dienste werden nur in diesem Testbaum abgestumpft/offline. Es überprüft Navigationsreihenfolge, Protokollergebnisse, Persistenz, CZ/DE/EN, beide Themen, schmale Fensterüberlauf und Sandbox-Einstellungen. Wenn die Shell ELECTRON_RUN_AS_NODE setzt, setzen Sie sie für diesen Befehl aus. Die aktuelle Laufzeitüberprüfung umfasst kontrollierte QUIC-Übertragungen, IPv4/IPv6, HTTPS an einem nicht standardmäßigen Port, 404-Antworten, TLS Fehler und eine TCP-only Servicewerbung Alt-Svc. Pro-Build Ergebnisse begleiten jede Veröffentlichung. Explizite optionale Grenzwerte: keine unabhängige DNSSEC-Validierung (erfordert einen vollständigen Validierungsresolver/Trust-Anchor-Lebenszyklus), kein Lighthouse-Audit (nur Server-/Netzwerkzeitpunkt), kein veraltetes TLS-Audits oder Widerrufs-/CT-Service, kein HTTP3 Warmwiederverwendungsanspruch und keine HTTP/3 Wärmewiederverwendungsmessung. Nicht unterstützte Fähigkeiten werden eher angezeigt als simuliert. ## Dateien in dieser Änderung Erstellt: die sieben Dienstdateien in `src/main/diagnostics/`; `src/renderer/diagnostics.js`, `diagnosticsI18n.js` und `diagnostics.css`. Die vier `test/diagnostics*.test.js`-Dateien; fünf Dateien unter `test/fixtures/diagnostics/` ; `scripts/smokeDiagnostics.js`: Dieses Dokument. Integriert/aktualisiert: `src/main/index.js`, `src/main/ipc/registerCoreIpc.js` , `src/preload/corePreload.js` ; `src/renderer/index.html`; `app.js` : `i18n.js` = `package.json` + `app/README.md` / `README.md` x `.gitignore` (vier öffentliche Fixture-Ausnahmen) und die Root Gitleaks Allowlist nennen das bewusst öffentliche TLS Testkey-Fessel nur knapp. Der Signing-CA-Privatschlüssel wurde verworfen; die Fixture wird von der Laufzeit der Anwendung nie verwendet.