> Den här översättningen granskas språkligt. Jämför otydliga avsnitt med det [engelska originalet](https://www.sm.ch-j.eu/docs/i18n/en/server-diagnostics.md). # Serverdiagnostik Integrerad i kärnfältet, i ordningen Plugins → Server Diagnostics → Hash & Checksum. Det kräver ingen SSH- session eller nedladdad plugin. Alla körtider kod, tester och fixturer lever i `app/`; modulen har inget beroende av syskonförråd. Arkivet har ingen `doc.md`, så detta dokument och båda READMEs beskriver genomförandet. ## Användararbetsflöde Ange ett värdnamn, IPv4, IPv6 eller HTTP/WS(S) URL. Bara värdnamn/IPs standard för HTTPS; uttryckliga webbadresser behåller sin sökväg, förfrågan och port under begäran. Hederstecken i webbadresser, system som inte stöds, blanktecken/kontrolltecken och skalliknande värdnamn avvisas. IPv6-bokstavarna är automatiskt åtskilda; scrippade/länklokala zonidentifierare stöds inte av URL-tolken. Välj automatiskt (föreläs IPv4, annars IPv6), IPv4 eller IPv6. Lös upp adresser för att välja ett specifikt aktuellt svar. Översikten visar alla lösta svar; sonder testar den valda adressen eller en adress per begärd familj. Båda familjerna mäts självständigt. Enbart AAA-närvaro innebär aldrig att IPv6-anslutningen fungerar. Kör Diagnostics kör DNS, ping, traceroute, HTTP, kompression, TLS och de valda TCP-portarna. WebSocket är opt-in. Varje verktyg har också en separat Run/Stop-kontroll. En diagnostisk körning kan vara aktiv på en gång. En slutförd körning innebär att verktygen är klara, inte att varje sond lyckades. Det finns ingen filt server offline. Tidsgräns, paketräkning, upprepningar, maximala humle, DNS-upplösning, protokollval, varm anslutning och HTTP/HTTPS-jämförelse är konfigurerbara. Genom att ändra målet rensas en tidigare vald IP. Historik kan öppna, jämföra två rapporter, ta bort, importera JSON, kopiera eller exportera JSON/CSV/TXT genom infödda kärndialogrutor. Light/dark/system tema gäller för diagnostik avsnittet och sparas i den befintliga UI-konfigurationen. CZ/DE/EN följer applikationsspråket omedelbart. ## Komponenter och protokollbeteende | Komponent | Implementering och tolkning | | --- | --- | | `common.js` | Validerar mål/alternativ, gränser och enumvärden; IDNA-konvertering; numerisk statistik utesluter okända värden. | | `dnsDiagnostics.js` | Systemadressupplösning använder `dns.lookup` för att hedra OS-konfiguration och värdfiler. Rekordfrågor använder avgränsade UDP DNS med TCP fallback för trunkerade svar mot `dns.getServers()`, eller uttryckligen valt anpassade / offentliga resolver. Ingen implicit övergång till offentlig DNS. | | `processTools.js` | Kör OS ping/trace route med ett argument array och `shell: false`, begränsad utgång, explicit timeout och abort / döda rensning. Parses paket svar och humle, snarare än att behandla processen varaktighet som RTT. | | `httpDiagnostics.js` | Bundled curl för HTTP/1.1, HTTP/2 och HTTP/3; strikt certifikatverifiering och fastsatt IP-familj. Varje version begärs självständigt, den faktiska versionen registreras. | | `socketDiagnostics.js` | Explicit TLS-versionsonder, avgränsade TCP-anslutningar/passiva banners, förautentisering SSH värddator-key observation med hjälp av det befintliga ssh2-beroendet, och valfri RFC 6455 uppgradering validering. | | `diagnosticsService.js` | Kör och avbryter verktyg, väljer/validerar adresser, strömmar framsteg, bevarar partiella mätningar och äger körfristen. | | `historyStore.js` | Versionerad avgränsad lokal historik, reaktion, schemakontrollerad import och uppmätt dataexport. | ### ICMP och rutter Ping standardvärden till fyra individuellt utförda ICMP echo förfrågningar. Resultaten innehåller per-packet uppmätt RTT, mottagna/skickade värden, förlust, min/average/max, populationsstandardavvikelse, genomsnittlig absolut skillnad mellan på varandra följande uppmätta RTTs (jitter), TTL/Hop Limit vid tryck och tidsstämpelr. Ett `<1 ms` svar räknas som mottaget med en övre gräns, snarare än att uppfinna en numerisk RTT. Okända RTT är undantagna från latensstatistiken. Statistiken använder det kvarhållna fönstret av högst 500-paket; send/received/loss räknar täcker hela körningen. Grafer visar de senaste 200-observationerna, med tydliga symboler för svar, underupplösningssvar, saknade svar och explicit begäran/processtidsutgång. Ett svar som saknas kan återspegla ICMP-filtrering, paketförlust eller timeout; dessa observationer kan inte identifiera en brandvägg slutgiltigt. Saknade körbara program, lokala behörighetsfel och ogiltiga verktygsanrop är separata verktygsfel, inte paketförlust eller serverbrist. Ingen utökning av privilegierna begärs. Traceroute strömmar humle, adresser, enskilda sonder, medel och observerade obesvarade-prob procent. Omvänd DNS löses efter rutten med hjälp av den valda upplösningen. Repetitioner jämför observerade hop-adresssekvenser; skillnader kan återspegla lastbalansering. Obesvarat mellanhöst fastställer inte en bruten rutt. Oberedd sondmetadata och metod visas i expanderbara detaljer. macOS kräver heltal-sekund spårväg väntar; den effektiva rundade timeout registreras. ### DNS De tolv skivtyperna är A, AAAA, CNAME, MX, NS, TXT, SOA, SRV, CAA, PTR, DS och DNSKEY. DNS tråd tolkning kontrollerar transaktion/fråga identitet, rekordstorlekar, komprimering-pekare slingor och meddelandegränser. Svar bevara rekord TTLs, fråge timing, resolver och NXDOMAIN/NODATA/SERVFAIL/refused/timeout stater. OS- adresslookups kan inte leverera TTL; den separata rekordfrågan kan. CNAME som följer begränsas till åtta kopplingar med cykeldetektering. Överensstämmelse upprepar A/AAAA-svar från den valda resolver och utför framåtbekräftade PTR för IP-litterära DNS-tester. Ändrade svar är observationer, inte bevis på ett DNS fel. Frågor för SRV använder målnamnet som anges; ange ett servicenamn som `_service._tcp.example.org` vid behov. DNSSEC är alltid **not validerad**. DS/DNSKEY närvaro och även en resolver's AD flagga behandlas aldrig som oberoende validering. ### HTTP, prestanda och kompression HTTP/1.1 accepterar den versionen som stöds bara när den faktiskt returnerades. HTTPS HTTP/2 kräver förhandlad h2; ingen reserv är ommärkt. Cleartext HTTP/2 använder förkunskaper, inte en HTTP/1.1 Uppgradera sond. TLS-verifieringen förblir strikt för varje HTTP/WebSocket-begäran. Manuell omdirigering är begränsad till åtta; slingor, ogiltiga destinationer och alltför stora omdirigeringar misslyckas explicit. De fullständiga kedjeposter korsdomänändringar och HTTPS-nedgrader; scheman och www-ändringar är synliga i källkods/destinationswebbadresserna. Kreditvärderingssystem och icke-HTTP(S) omdirigeringssystem avvisas. Varje omdirigering mellan värddatorn löses självständigt genom den valda resolver och efterfrågad IP-familj. Mätningar inkluderar DNS (när det utförs), TCP, TLS, slutsvaret TTFB, total TTFB inklusive DNS/redirects, nedladdning, omdirigering och total väggtid, faktiska enhetsbyten, överföringshastighet, status, svarshuvuden, faktisk serveradress/port, ALPN och verifierad återanvändning av anslutning. DNS/TCP/TLS faser som inte utförs på en fastsatt eller återanvända anslutning är `N/A`, inte falska nollor. QUIC har ingen TCP-fas; handslaget registreras separat. Huvudöverföring eller full tråd över huvud är inte hävdas som entity-byte mätning. Det här är server/nätverkstidtabeller, inte sidåtergivning eller Lighthousepoäng. Varje valt protokoll använder samma mål och upprepningar. IPv4/IPv6 och HTTP/HTTPS är explicita jämförelsealternativ. Alternativsystemet använder sin standardport. Varje protokoll startar en oberoende medföljande klientprocess per prov. Återanvändning av anslutning görs inte. Totaltidsstatistiken omfattar min/average/median/max/nearest-rank P95 och en separat felfrekvens för transport/protokoll; HTTP-statuskoder förblir synliga även när en server med framgång returnerar ett svar på 4xx/5xx. Kompression skickar identitet, gzip, deflate, br och (när körtiden stöder det) zstd som separata Accept-Encoding förfrågningar. Innehållskodning måste matcha, och avgränsad dekompression måste lyckas. Ett förhållande beräknas endast om den avkodade kroppshashen, slutliga webbadressen och statusen överensstämmer med identitetsreferensen. Ignorerade kodningar stöds inte; föränderliga/dynamiska kroppar har inget förhållande. Detta är en observation för den webbadressen/statusen, inte stöd för universella servrar. Säkerhetskontroller visar förekomst och värde av HSTS, CSP, X-Content-Type-Options, Referrer-Policy, Authorities-Policiy och X-Frame-Optioner. Ett direktiv om CSP-ramgivare kan ersätta det senare. Närvaro visar inte att policyn är korrekt konfigurerad eller att webbplatsen är säker. ### HTTP/3 krav och bevis HTTP/1.1, HTTP/2 och HTTP/3 använder samma medföljande curl klient. macOS arm64 och Linux x64 använda lock 8.22.0, OpenSSL 3.5.9, nghttp2 1.70.0, ngtcp2 1.25.0 och nghttp3 1.18.0. Windows x64 använder den officiella curl.se curl-for-win 8.22.0_3 static build med LibreSSL 4.3.3 och samma HTTP bibliotek. Ingen system curl reserv, körtid nedladdning eller behörighet för administratören behövs. Windows uppströms reproducerbart byggrecept är https://github.com/curl/curl-for-win/tree/9d77e31e . Bygg med `python3 scripts/native/build.py` (Windows: `python scripts/native/build.py`) innan förpackning. macOS/Linux kräver C/C++-verktyg, CMake, Ninja, Perl, make och pkg-config. Källorna är fastsatta efter version och uppströms SHA-256 i `scripts/native/dependencies.lock.json`. Skriptet verifierar varje nedladdning, statisk länkar tredjeparts transportbibliotek och misslyckas utan HTTP2/HTTP3/SSL funktioner. Endast operativsystemsbibliotek förblir dynamiska. Windows använder den pinned officiella binära arkiv, inte en lokalt kompilerad Windows transport stack. Den medföljande CA-filen har sin egen fastsatta hash; komponentlicenser och uppströms bygga härkomst följer körtiden. Kunden och förtroendebutiken är installerade utanför app.asar i `resources/native-runtime/-/`. Varje diagnostik verifierar komponent hashes, arkitektur och körbara funktioner innan användning. Konfigurera filer, proxies, TLS trust miljö företräden och bibliotek injektion variabler är uteslutna. lock körs med en absolut sökväg, skal inaktiverad, verifierad CA förtroende, en uttryckligt löst IP-familj, inga cookies, inga automatiska omdirigeringar, och begränsad utdata och tid. Omdirigeringar valideras och återlöses av ansökan. HTTPS på andra portar än 443 stöds. HTTP/3 använder `--http3-only` och bekräftas först efter en avslutad överföringsrapportering HTTP-version 3 samt lyckad certifiering. HTTP-felsvar som 404 kan bekräfta protokollet. Alt-Svc är en annons, inte bevis. QUIC timeout, certifikatfel, DNS fel, anslutningsvägran, inkompatibelt protokoll och komponentfel förblir distinkt. En UDP timeout lämnar serverstöd okontrollerat. QUIC handskakningstidpunkten rapporteras inte som TCP-tidpunkt. Varje mätning startar en separat process/anslutning. Det varma alternativet hävdar inte återanvändning av anslutning för den medföljande klienten. Detta håller protokoll jämförelser konsekvent. Rapporter inkluderar körtidsversioner, funktioner, TLS verifiering och QUIC timing, medan historik / export ta bort organ, URL-frågor och autentiseringshuvuden. Uppdatera dessa stift och bygga om varje stödd plattform när du uppdaterar transport stacken eller CA trust store. Publicerade artefakter och källögonblicksbilder är oföränderliga. ## IPC-kärna Preload exponerar endast `window.chjCore.diagnostics`. Alla hanterare behåller den befintliga kontrollen av huvudfönsteravsändare och nätverksarbetet stannar i huvudsak. Resultaten använder `{ ok: true, value }` eller `{ ok: false, error: { code, message } }`. | Channel / förspänningsmetod | Högbelastning / resultat | | --- | --- | | `diagnostics:resolve` / `resolve(options)` | Validerade mål/inställningar → mål och fastställda adresser. Som mest två samtidiga resolutionskrav. | | `diagnostics:start` / `start(options)` | Validerat mål/settings/tool val → ogenomskinligt jobb-ID och första rapport. | | `diagnostics:cancel` / `cancel(id, tool?)` | Avbryt ett aktivt/krävt verktyg eller hela körningen. | | `diagnostics:get` / `get(id)` | Snapshot av en känd kör eller sparad rapport. | | `diagnostics:history`/`history()`Z | Lokala sammanfattningar av historia. | | `diagnostics:removeHistory` / `removeHistory(id)` | Ta bort det markerade historikobjektet. | | `diagnostics:copy` / `copy(id, format)` | Main skriver en redigerad känd rapport till klippbordet. | | `diagnostics:export` / `export(id, format)`Z | JSON/CSV/TXT via dialogruta för inbyggt sparande. Render kan inte tillhandahålla en filsystemsökväg. | | `diagnostics:import` / `import()` | Native filplockare, storlek/schema/depth validering och omdestinering innan lagring. | | `diagnostics:progress` / `onProgress(callback)` | Lösade adresser, verktyg startar/kompletterar, paket, humle, HTTP-prover och komplettering; returnerar en avanmälning. | Inget generiskt skal, filsystem eller nätverk API exponeras. Sammanhangsisolering, sandlåda, inaktiverad Nodintegration och den befintliga rendern CSP förblir aktiverad. Befintliga plugin-kontrakt och uppdateringskontroll / undantag är oförändrade. ## Budgetar och lokala uppgifter - En körning, två aktiva verktyg, högst två IP-familjesonder per verktyg; TCP begränsar dessutom varje adress till fyra anslutningar. - Tidsgräns per operation 250–30000 För att säkerställa en enhetlig tillämpning av denna förordning ska kommissionen ges befogenhet att anta delegerade akter i enlighet med artikel 290 i EUF-fördraget med avseende på de bestämmelser som är nödvändiga för att följa detta direktiv. 1–100 paket, 1–20 upprepningar, 1–40 humle, 1–16 Hamnar. Regelbundna körningar stannar vid fem minuter, kontinuerlig ping på trettio minuter. Underprocessen för spårvägar har ytterligare en 180- Andra mössan. - Processutgång normalt 256 KiB; HTTP-enhet kropp 2 MiB; dekomprimerad kropp 8 Mib; HTTTP-huvuden avgränsade; inga svar kroppar ange historia. - Behåll som mest 500 paket/progress händelser, fem in-minne körs, trettio historia rapporter och 10 MiB historia. Historia använder den befintliga privata atomförfattaren på `/diagnostics/history.json` (läge 0600). - Importen är som mest 2 MiB, schema 1, med avgränsad häckning och validerade resultatsamlingar. CSV-celler undkommas och formel prefix neutraliseras. URL-frågor/fragment, referenser, cookies, autentiseringshuvuden och råa kroppar är undantagna från lagrade /copied/exported-rapporter. Råa uppgifter visar uppmätta strukturerade data, inte ett paket som fångar upp eller behåller svarsorganet. - Ingen molnsynkronisering, automatisk inloggning, serverkonfigurationsändringar eller aggressiv/obunden skanning. Användaren väljer uttryckligen mål/ports/resolver. ## Krav på plattformar och kontroll | Plattform | ICMP | Route | Övriga protokoll | | --- | --- | --- | --- | | Windows 10/11 | `ping.exe -4/-6` | `tracert.exe -4/-6`, ICMP | Bundlad curl.exe där HTTP/2 och HTTP/3. Lokala RTT-fält beror inte på ordet "tid". | | macOS | `/sbin/ping`, `/sbin/ping6` | `/usr/sbin/traceroute`, `/usr/sbin/traceroute6`, UDP; heltal-sekund väntar | Bundled locktång med HTTP/2 och HTTP/3. | | Ubuntu/LinuxZ | iputils `ping -4/-6` | standard `traceroute -4/-6`, UDP | Bundled curl med HTTP/2 och HTTP/3; saknas ICMP / route verktyg rapporteras separat. | Inget nytt beroende av npm tillkom. Genomförandet använder Node inbyggda och applikationens befintliga ssh2. Den installerar varken systemverktyg eller begär administrativa rättigheter. Brandväggar och UDP-restriktioner kan förhindra att ett test etablerar stöd; de kan inte härledas från en timeout ensam. Automatiserad täckning finns i `diagnosticsCore.test.js`, `diagnosticsNetwork.test.js`, `diagnosticsHttp.test.js` och `diagnosticsIpc.test.js`: validering/IPv6 ordaliska, inhemska/lokala DNS UDP+TCP-aite, saknade/dubbel-familjesvar och resolverfel, CNAME/konsistens, OS-argument/parsing-armaturer, avgränsade verkliga barnprocesser, blockerade ICMP-observationer, verkliga lokala HTTP/1.1 och TLS h2, omdirigeringar/kroppsgränser/timeouts/reuse, kompressionsaktiverad/oavbruten. HTTP3 kapacitet/framgångs-resultat tolkning/fall tillbakavisande, lokalt CA förtroende/mismatch/expiration och verklig IPv6 HTTP/HTTPS, TCP-anslutning/refused/mock timeout, riktiga WebSocket och SSH Handslag före autentisering, avbokning/cleanup/partial resultat, offline tillstånd, privat historia tur/retur/import avvisande / export, betrodda IPC och preload abonnemang. `npm test` kör deterministiska tester utan offentliga testservrar. `npm run test:diagnostics:ui` kör `scripts/smokeDiagnostics.js` i ett grafiskt Electron-skrivbord, med hjälp av produktions-UI/preload/IPC och riktiga lokala HTTP/kompressionssonder. Orelaterade tjänster är endast stubbade/offline i denna testsele. Det kontrollerar navigeringsordning, protokollresultat, uthållighet, CZ/DE/EN, båda teman, smalt fönsterspill och sandlåda preferenser. Om skalet ställer in ELECTRON_RUN_AS_NODE, avmarkera det för detta kommando. Kontrollen av aktuell körtid omfattar kontrollerade QUIC-överföringar, IPv4/IPv6, HTTPS på en icke-standardport, 404-svar, TLS fel och en TCP-baserad tjänstereklam Alt-Svc. Per-build resultat medföljer varje release. Explicita valfria gränser: ingen oberoende DNSSEC-validering (kräver en fullständig valideringsupplösning/trust-anchor livscykel), ingen Lighthouse granskning (endast server/nätverkstidpunkt), ingen avprecerad TLS revision eller återkallande / CT-tjänst, ingen HTTP3 varmåteranvändning påstående, och ingen HTTP/3 värmeåteranvändning mätning. Ostödda funktioner visas snarare än simuleras. ## Filer i den här ändringen Skapad: de sju servicefilerna i `src/main/diagnostics/`; `src/renderer/diagnostics.js`, `diagnosticsI18n.js` och `diagnostics.css`. De fyra `test/diagnostics*.test.js`-filerna. Fem filer under `test/fixtures/diagnostics/`: `scripts/smokeDiagnostics.js` Integrerad/uppdaterad: `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`, rot `README.md`, `.gitignore` (fyra undantag för offentliga fixturer), och rotgitleaks tillåter lista snävt namnge avsiktligt allmänheten TLS Provningsnyckelfixtur. Signaturen CA privat nyckel kastades; fixturen används aldrig av programmet körtid.