> Deze vertaling wordt taalkundig herzien. Vergelijk onduidelijke passages met het [Engelse origineel](https://www.sm.ch-j.eu/docs/i18n/en/server-diagnostics.md). # Serverdiagnostiek Geïntegreerd in de Core zijbalk, in de volgorde Plugins → Server Diagnostics → Hash & Checksum. Het vereist geen SSH sessie of gedownloade plugin. Alle runtime code, tests en armaturen live in `app/`; de module is niet afhankelijk van broers en zussen repositories. De repository heeft geen `doc.md`, dus dit document en beide README's beschrijven de implementatie. ## Gebruikersworkflow Voer een hostnaam in, IPv4, IPv6 of HTTP(S)/WS(S) URL. Bare hostnamen/IP's standaard naar HTTPS; expliciete URL's behouden hun pad, zoekopdracht en poort tijdens het verzoek. Intelligentie in URL's, niet-ondersteunde schema's, witruimte/control karakters en shell-achtige hostnamen worden afgewezen. IPv6-letteralen worden automatisch vastgezet; scoped/link-local zone identifiers worden niet ondersteund door de URL-parser. Kies Auto (voor IPv4, anders IPv6), IPv4 of IPv6. Adressen opzoeken om een bepaald huidig antwoord te kiezen. Het overzicht toont alle opgeloste antwoorden; sondes testen het geselecteerde adres of één adres per gevraagde familie. Beide families worden onafhankelijk gemeten. AAAA aanwezigheid alleen al betekent nooit werken IPv6 connectiviteit. Start Diagnostics draait DNS, ping, traceroute, HTTP, compressie, TLS en de geselecteerde TCP-poorten. WebSocket is opt-in. Elke tool heeft ook een aparte Run/Stop controle. Eén diagnose kan tegelijk actief zijn. Een voltooide run betekent dat de gereedschappen klaar zijn, niet dat elke sonde geslaagd is. Er is geen deken-server offline een uitspraak. Timeout, pakketaantal, herhalingen, maximum hop, DNS resolver, protocol selectie, warme verbinding en HTTP/HTTPS vergelijking zijn configureerbaar. Het wijzigen van het doel maakt een eerder geselecteerd IP-adres vrij. Geschiedenis kan heropenen, vergelijken twee rapporten, verwijderen, JSON importeren, kopiëren of exporteren van JSON/CSV/TXT via native Core dialogen. Light/dark/system thema is van toepassing op de diagnostiek sectie en wordt opgeslagen in de bestaande UI configuratie. CZ/DE/EN volgt onmiddellijk de toepassingstaal. ## Componenten en protocolgedrag | Component | Implementatie en interpretatie | | --- | --- | | `common.js` | valideert targets/opties, limieten en enum waarden; IDNA conversie; numerieke statistieken sluiten onbekende waarden uit. | | `dnsDiagnostics.js`-| Systeemadresresolutie maakt gebruik van `dns.lookup` om OS configuratie te eren en hosts bestanden. Record queries gebruiken begrensd UDP DNS met TCP fallback voor afgekorte antwoorden tegen `dns.getServers()`, of de expliciet gekozen aangepaste/publieke oplossing. Geen impliciete overstap naar publieke DNS. | | `processTools.js` | Execeert OS ping/traceroute met een argument array en `shell: false`, begrensd uitvoer, expliciete timeout en abort/kill opruiming. Ontleden pakket antwoorden en hop, in plaats van behandeling proces duur als RTT. | | `httpDiagnostics.js`z | Gebundelde krul voor HTTP/1.1, HTTP/2 en HTTP/3; strikte certificaatverificatie en gepinde IP-familie. Elke versie wordt onafhankelijk aangevraagd; de werkelijke versie wordt geregistreerd. | | `socketDiagnostics.js` | expliciete TLS versiesondes, begrensd TCP verbindt/passieve banners, pre-authenticatie SSH host-key observatie met behulp van de bestaande ssh2-afhankelijkheid en optionele RFC 6455 Upgrade validatie. | | `diagnosticsService.js` | heeft tools geannulleerd, selecteert/valideert adressen, stroomt vooruitgang, behoudt gedeeltelijke metingen en bezit de looptijd. | | `historyStore.js` | Versied begrensde lokale geschiedenis, redactie, schema-gecontroleerde import en gemeten-data export. | ### ICMP en routes Ping standaard 4 individueel uitgevoerde ICMP echo-verzoeken. De resultaten bevatten per verpakking gemeten RTT, ontvangen/verzonden aantallen, verlies, min/average/max, populatie standaardafwijking, gemiddeld absoluut verschil tussen opeenvolgende gemeten RTT's (jitter), TTL/Hop Limit bij afdrukken en tijdstempels. Een `<1 ms` antwoord wordt geteld als ontvangen met een bovengrens, in plaats van het uitvinden van een numerieke RTT. Onbekende RTT's zijn uitgesloten van latency statistieken. Statistieken gebruiken het bewaarde venster van maximaal 500 pakketten; send/received/loss nummers bestrijken de hele run. Grafieken tonen de laatste 200 waarnemingen, met verschillende symbolen voor antwoorden, sub-resolutie antwoorden, ontbrekende antwoorden en expliciete verzoek/proces timeouts. Een ontbrekend antwoord kan de filtering, pakketverlies of timeout van ICMP weerspiegelen; deze waarnemingen kunnen een firewall niet overtuigend identificeren. Ontbrekende uitvoerbare bestanden, lokale machtigingsfouten en ongeldige gereedschapsaanroepingen zijn aparte gereedschapsfouten, geen pakketverlies of onbeschikbaarheid van de server. Er wordt geen privilege escalatie gevraagd. Traceroute stroomt hop, adressen, individuele sondes, middelen en waargenomen onbeantwoorde probe percentages. Omgekeerde DNS is opgelost na de route, met behulp van de geselecteerde resolver. Herhalingen vergelijken de waargenomen hop-adressequenties; verschillen kunnen een weerkaatsing van het belastingsevenwicht zijn. Onbeantwoorde tussen hop stelt geen verbroken route vast. Raw sonde metadata en methode verschijnen in uitbreidbare details. macOS vereist integer-seconde traceroute wacht; de effectieve afgeronde timeout wordt geregistreerd. ### DNS De twaalf recordtypes zijn A, AAAA, CNAME, MX, NS, TXT, SOA, SRV, CAA, PTR, DS en DNSKEY. DNS wire parsing controleert transactie/vraag identiteit, recordgroottes, compressie-pointer loops en berichtlimieten. Antwoorden behouden record TTLs, query timing, resolver en NXDOMAIN/NODATA/SERVFAIL/refused/timeout staten. OS adres opzoeken kan geen TTL leveren; de aparte record query kan. De volgende CNAME wordt begrensd tot acht schakels met cyclusdetectie. Consistentie herhaalt A/AAAA antwoorden van de geselecteerde resolver en voert vooraf bevestigde PTR uit voor IP-literale DNS testen. Veranderde antwoorden zijn observaties, geen bewijs van een DNS-fout. Zoekopdrachten voor SRV gebruiken de doelnaam zoals opgegeven; voer indien nodig een servicenaam in zoals `_service._tcp.example.org`. DNSSEC is altijd **not gevalideerd**. DS/DNSKEY aanwezigheid en zelfs de AD-vlag van een resolver worden nooit behandeld als onafhankelijke validatie. ### HTTP, prestaties en compressie HTTP/1.1 accepteert die versie alleen als deze daadwerkelijk werd teruggegeven. HTTPS HTTP/2 vereist onderhandelde h2; geen terugval wordt herlabeld. Cleartext HTTP/2 maakt gebruik van voorkennis, geen HTTP/1.1 Upgrade sonde. TLS-verificatie blijft streng voor elke HTTP/WebSocket-aanvraag. Handmatige omleidingen zijn beperkt tot acht; lussen, ongeldige bestemmingen en buitensporige omleidingen falen expliciet. De volledige keten registreert cross-domein wijzigingen en HTTPS downgrades; schema's en www veranderingen zijn zichtbaar in de bron/bestemming URL's. De omleidingsregelingen worden afgewezen. Elke cross-host redirect wordt onafhankelijk opgelost via de geselecteerde resolver en gevraagde IP-familie. Metingen omvatten DNS (wanneer uitgevoerd), TCP, TLS, final-respons TTFB, algehele TTFb inclusief DNS/redirects, download, redirect en totale wandtijd, werkelijke entiteit bytes, overdrachtssnelheid, status, responskopieers, werkelijke serveradres/poort, ALPN en geverifieerde verbindinghergebruik. DNS/TCP/TLS-fasen die niet op een gepinde of hergebruikte verbinding worden uitgevoerd, zijn `N/A`, geen nepnullen. QUIC heeft geen TCP fase; de handdruk wordt apart geregistreerd. De overhead-overschrijving of volledige draadoverhead wordt niet als entiteitsbytemeting beschouwd. Dit zijn server/netwerk timings, geen pagina rendering of Lighthouse scores. Elk geselecteerd protocol gebruikt hetzelfde doel en dezelfde herhalingen. IPv4/IPv6 en HTTP/HTTPS zijn expliciete vergelijkingsopties. Het alternatieve schema gebruikt zijn standaard poort. Elk protocol start een onafhankelijk gebundelde client proces per monster. Verbindingshergebruik wordt niet beweerd. Total-time statistieken omvatten min/average/median/max/nearest-rank P95 en een aparte transport/protocol foutpercentage; HTTP status codes blijven zichtbaar, zelfs wanneer een server met succes een 4xx/5xx response geeft. Compressie stuurt identiteit, gzip, deflatate, br en (wanneer de runtime het ondersteunt) zstd als aparte Accept-Encoding verzoeken. Content-Encoding moet overeenkomen, en begrensde decompressie moet slagen. Een verhouding wordt alleen berekend als de gedecodeerde body hash, uiteindelijke URL en status overeenkomen met de identity baseline. De negeerde coderingen worden niet ondersteund; de verandering/dynamische lichamen hebben geen verhouding. Dit is een observatie voor die URL/status, niet universele ondersteuning van de server. Beveiligings-header controles tonen aanwezigheid en waarde van HSTS, CSP, X-Content-Type-Options, Reference-Policy, Permissions-Politie en X-Frame-Options. Een CSP frame-ancestors richtlijn kan de laatste vervangen. Aanwezigheid toont niet aan dat het beleid correct is geconfigureerd of dat de website veilig is. ### HTTP/3 eisen en bewijs HTTP/1.1, HTTP/2 en HTTP/3 maken gebruik van dezelfde gebundelde curl client. macOS arm64 en Linux x64 gebruik krul 8.22.0, OpenSSL 3.5.9, nghttp2 1.70.0, ngtcp2 1.25.0 en nghttp3 1.18.0. Windows x64 gebruikt de officiële curl.se curl-for-win 8.22.0_3 statische build met LibreSSL 4.3.3 en dezelfde HTTP bibliotheken. Geen systeem krullen terugval, runtime download of beheerder toestemming is nodig. Het Windows upstream reproduceerbaar build recept is https://github.com/curl/curl-for-win/tree/9d77e31e . Bouwen met `python3 scripts/native/build.py` (Windows: `python scripts/native/build.py`) voor verpakking. macOS/Linux vereist C/C++ tools, CMake, Ninja, Perl, make en pkg-config. Bronnen worden gepind door versie en upstream SHA-256 in `scripts/native/dependencies.lock.json`. Het script controleert elke download, statisch koppelt externe transportbibliotheken en faalt zonder HTTP2/HTTP3/SSL-functies. Alleen bibliotheken van besturingssystemen blijven dynamisch. Windows gebruikt het gepinde officiële binaire archief, niet een lokaal gecompileerde Windows transport stack. Het gebundelde CA-bestand heeft zijn eigen gepinde hash; componentlicenties en upstream build herkomst begeleiden de runtime. De client en trust store zijn geïnstalleerd buiten app.asar in `resources/native-runtime/-/`. Elke diagnostische controleer component hashes, architectuur en uitvoerbare mogelijkheden voor gebruik. Config bestanden, proxies, TLS vertrouwen omgeving overrides en bibliotheek injectie variabelen zijn uitgesloten. curl draait met een absoluut pad, shell uitgeschakeld, geverifieerd CA vertrouwen, een expliciet opgelost IP-familie, geen cookies, geen automatische omleidingen, en begrensde output en tijd. Redirects worden gevalideerd en opnieuw opgelost door de aanvraag. HTTPS op andere poorten dan 443 wordt ondersteund. HTTP/3 maakt gebruik van `--http3-only` en wordt pas bevestigd na een voltooide overdracht rapportage HTTP versie 3 and succesvolle certificaat verificatie. HTTP-foutresponsen zoals 404 kunnen het protocol bevestigen. Alt-Svc is een advertentie, geen bewijs. QUIC timeout, certificaatfout, DNS-fout, weigering van de verbinding, incompatibel protocol en onderdeelfalen blijven onderscheiden. Een UDP timeout laat de ondersteuning van de server ongeverifieerd. QUIC handshake timing wordt niet gerapporteerd als TCP timing. Elke meting start een afzonderlijk proces/verbinding. De warme optie claimt geen hergebruik van verbindingen voor de gebundelde klant. Dit houdt protocol vergelijkingen consistent. Rapporten omvatten runtime versies, mogelijkheden, TLS verificatie en QUIC timing, terwijl geschiedenis/export organen, URL-queries en authenticatiekoppen verwijderen. Update deze spelden en herbouw elk ondersteund platform bij het bijwerken van de transport stack of CA trust store. Gepubliceerde artefacten en bron snapshots zijn onveranderlijk. ## Kern-IPC Preload stelt alleen `window.chjCore.diagnostics` bloot; alle verwerkers behouden de bestaande main-window afzender controle en het netwerk werk blijft in hoofd. De resultaten gebruiken `{ ok: true, value }` of `{ ok: false, error: { code, message } }`. | Channel / preload methode | Payload / resultaat | | --- | --- | | `diagnostics:resolve` / `resolve(options)`z | Gevalideerde target/instellingen → doel en opgelost adressen. Ten hoogste twee gelijktijdige resolutieverzoeken. | | `diagnostics:start` / `start(options)` | Gevalideerde target/settings/tool selectie → ondoorzichtige taak-ID en eerste rapport. | | `diagnostics:cancel` / `cancel(id, tool?)` | Annuleer één actief/gereserveerd hulpmiddel of de hele run. | | `diagnostics:get` / `get(id)`z | Snapshot van een bekend run- of opgeslagen rapport. | | `diagnostics:history` / `history()`z | Lokale geschiedenissamenvattingen. | | `diagnostics:removeHistory` / `removeHistory(id)` | Verwijder het geselecteerde geschiedenisitem. | | `diagnostics:copy` / `copy(id, format)` | Main schrijft een geredigeerd rapport naar klembord. | | `diagnostics:export` / `export(id, format)`z | JSON/CSV/TXT via native save dialoog; renderer kan geen filesystem pad leveren. | | `diagnostics:import` / `import()`z | Native file picker, size/schema/depth validatie en redactie alvorens op te slaan. | | `diagnostics:progress` / `onProgress(callback)` | Opgelost adressen, gereedschap start/voltooit, pakketten, hop, HTTP-samples en voltooiing; geeft een afmeld callback terug. | Geen generiek shell, bestandssysteem of netwerk API is blootgesteld. Context isolatie, sandbox, disabled Node integratie en de bestaande renderer CSP blijven ingeschakeld. Bestaande plugin contracten en updater verificatie / uitzonderingen zijn ongewijzigd. ## Begrotingen en lokale gegevens - Eén run, twee actieve tools, hoogstens twee IP-familie sondes per gereedschap; TCP beperkt bovendien elk adres tot vier verbindingen. - Tijdslimiet per operatie 250–30000 ms; 1–100 pakketten, 1–20 herhalingen; 1–40 hop, 1–16 havens. Regelmatige ritten stoppen bij vijf minuten; continue ping bij dertig minuten. Het traceroute-subproces heeft nog een 180-second cap. - Procesuitvoer normaal gesproken 256 KiB; HTTP entiteit lichaam 2 MiB; gedecomprimeerd lichaam 8 MIB; HTTTP-headers begrensd; geen response instanties voeren geschiedenis in. - Hou hooguit 500 pakketten/voortgangsgebeurtenissen, vijf in-geheugen runs, dertig geschiedenisrapporten en 10 MiB van de geschiedenis. Geschiedenis maakt gebruik van de bestaande privé-atomaire schrijver bij `/diagnostics/history.json` (mode 0600). - De invoer is hooguit 2 MiB, schema 1, met begrensde nest- en gevalideerde resultaatverzamelingen. CSV cellen zijn ontsnapt en formule voorvoegsels geneutraliseerd. URL-queries/fragmenten, referenties, cookies, authenticatiekoppen en ruwe lichamen zijn uitgesloten van opgeslagen/copied/exported rapporten. Raw details tonen gemeten gestructureerde gegevens, geen pakketopname of bewaard response body. - Geen cloudsynchronisatie, automatische aanmelding, serverconfiguratiewijzigingen of agressief/ongebonden scannen. De gebruiker kiest expliciet target/ports/resolver. ## Platformeisen en verificatie | Platform | ICMP | Route | Andere protocollen | | --- | --- | --- | --- | | Windows 10/11 | `ping.exe -4/-6` | `tracert.exe -4/-6`, ICMP | Gebundeld curl.exe met HTTP/2 en HTTP/3. Gelokaliseerde RTT-velden zijn niet afhankelijk van het woord | | macOS | `/sbin/ping`, `/sbin/ping6` | `/usr/sbin/traceroute`, `/usr/sbin/traceroute6`, UDP; integer-seconde wacht | Gebundelde krul met HTTP/2 en HTTP/3. | | Ubuntu/Linux | iputils `ping -4/-6`z | standaard `traceroute -4/-6`, UDP | gebundelde krul met HTTP/2 en HTTP/3; ontbrekende ICMP/route-tools worden afzonderlijk gerapporteerd. | Er werd geen nieuwe npm afhankelijkheid toegevoegd. De implementatie maakt gebruik van Node-build-ins en de applicatie bestaande ssh2. Het installeert geen systeemtools of vraagt administratieve rechten. Firewalls en UDP-beperkingen kunnen een test verhinderen om ondersteuning te verkrijgen; ze kunnen niet worden afgeleid uit een timeout alleen. Geautomatiseerde dekking is in `diagnosticsCore.test.js`, `diagnosticsNetwork.test.js`, `diagnosticsHttp.test.js` en `diagnosticsIpc.test.js`: validering/IPv6 letterlijk, native/local DNS UDP+TCP-armaturen, ontbrekende/duale-familie antwoorden en foutmeldingen in de oplossing, CNAME/consistentie, OS argument/parsing armaturen, begrensde echte kindprocessen, geblokkeerde ICMP-waarnemingen, echte lokale HTTP/1.1 en TLS h2, redirects/bodylimieten/timeouts/reuse, compressie ingeschakeld/ongeldig; HTTP3 mogelijkheden/succes-resultaat parsing/fallback afwijzing, lokaal CA vertrouwen/mismatch/expiration en echt IPv6 HTTP/HTTPS, TCP-verbinding/refused/mock timeout, echte WebSocket en SSH Voorauthenticatiehanddrukken, annulering/cleanup/partial resultaten, offline state, prive-historie ronde reis/import afwijzing / exporten, vertrouwde IPC en preload abonnementen. `npm test` voert deterministische tests uit zonder openbare testservers. `npm run test:diagnostics:ui` draait `scripts/smokeDiagnostics.js` in een grafische Electron-desktop, met productie UI/preload/IPC en echte lokale HTTP/compressiesondes. Niet-gerelateerde diensten worden alleen in dit testtuig gestikt/offlined. Het controleert navigatievolgorde, protocolresultaten, persistentie, CZ/DE/EN, beide thema's, smalle window overflow en sandbox voorkeuren. Als de shell ELECTRON_RUN_AS_NODE instelt, zet deze dan uit voor dit commando. De huidige runtime verificatie heeft betrekking op gecontroleerde QUIC-overdrachten; IPv4/IPv6, HTTPS op een niet-standaard poort, 404 antwoorden; TLS storingen en een TCP-alleen service reclame Alt-Svc. Per bouwresultaten begeleiden elke release. Expliciete optionele limieten: geen onafhankelijke DNSSEC-validatie (vereist een complete validatie van de levenscyclus van resolver/trustanker), geen Lighthouse audit (alleen server/netwerk timing), niet verouderd TLS audit of intrekking/CT-dienst, nee HTTP3 warm-hergebruik claim, en geen HTTP/3 meting van warm hergebruik. Niet-ondersteunde mogelijkheden worden eerder weergegeven dan gesimuleerd. ## Bestanden in deze wijziging Gemaakt: de zeven servicebestanden in `src/main/diagnostics/`; `src/renderer/diagnostics.js`, `diagnosticsI18n.js` en `diagnostics.css`. De vier `test/diagnostics*.test.js`-bestanden; vijf bestanden onder `test/fixtures/diagnostics/` (`scripts/smokeDiagnostics.js`); dit document. Geïntegreerd/bijgewerkt: `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`, wortel `README.md`, `.gitignore` (vier uitzonderingen op de openbare titel) en de root gitleaks allowlist die het doelbewuste publiek noemt TLS test-sleutelbevestiging. De ondertekening CA privé sleutel werd weggegooid; de armatuur wordt nooit gebruikt door de toepassing runtime.