> Revizuirea lingvistică a acestei traduceri este în curs. Pentru pasaje neclare, consultați [originalul în engleză](https://www.sm.ch-j.eu/docs/i18n/en/server-diagnostics.md). # Diagnosticare server Integrat în bara laterală de bază, în ordinea Module → Diagnosticul serverului → Hash & Checksum. Este nevoie de nici o sesiune SSH sau plugin descărcat. Toate codurile, testele și echipamentele de rulare trăiesc în `app/`; modulul nu are nicio dependență de arhivele fraților. Depozitul nu are `doc.md`, astfel încât acest document și ambele README descriu implementarea. ## Fluxul de lucru al utilizatorului Introduceți un nume de gazdă, IPv4, IPv6 sau HTTP(S) / WS (S) URL. Numele gazdelor/IP-urilor Bare implicit pentru HTTPS; URL-urile explicite își păstrează calea, interogarea și portul în timpul solicitării. Se resping credibilitățile în URL-uri, scheme nesusținute, caractere whitespace/control și nume de gazdă cash. Literalii IPv6 sunt grupați automat; identificatorii zonei locale de interes/link nu sunt sprijiniți de parser-ul URL. Alege Auto (preferă IPv4, altfel IPv6), IPv4 , IPv6 sau ambele. Rezolvați adresele pentru a alege un anumit răspuns curent. Prezentare generală afișează toate răspunsurile rezolvate; sondele testează adresa selectată sau o adresă pentru fiecare familie solicitată. Ambele familii sunt măsurate independent. Prezenţa AAA singură nu implică niciodată lucrul la conectivitatea IPv6. Run Diagnostics ruleaza DNS, ping, traseroute, HTTP, compresie, TLS și porturile TCP selectate. WebSocket este opt-in. Fiecare instrument are, de asemenea, un Run / Stop control separat. Un test de diagnosticare poate fi activ în acelaşi timp. O cursă completă înseamnă că uneltele au terminat, nu că fiecare sondă ar fi reuşit. Nu există nici o pătură bază offline. Timeout, număr de pachete, repetiții, hamei maxim, resoluționare DNS, selecție protocol, conexiune la cald și comparație HTTP/HTTPS sunt configurabile. Schimbarea ţintei eliberează un IP selectat anterior. Istoria poate redeschide, compara două rapoarte, șterge, importa JSON, copie sau export JSON/CSV/TXT prin dialoguri native core. Tema Light/dark/system se aplică secţiunii diagnostice şi este salvată în configuraţia UI existentă. CZ/DE/EN urmează imediat limba de aplicare. ## Comportamentul componentelor și protocolului | Componentă | Implementarea și interpretarea | | --- | --- | | `common.js`Z | validează ținte/opțiuni, limite și valori enum; conversie ADNI; statistici numerice exclud valorile necunoscute. | | `dnsDiagnostics.js` Rezoluţia adresei de sistem | utilizează `dns.lookup` pentru a onora configuraţia OS şi fişierele gazde. Interogările de înregistrări utilizează UDP delimitată DNS cu TCP rezervă pentru răspunsurile trunchiate împotriva `dns.getServers()` sau soluţionarul public ales în mod explicit. Niciun comutator implicit pentru DNS public. | | `processTools.js`Z | Execută OS ping/traceroute cu un array argument și `shell: false`, ieșire delimitată, timeout explicit și avort / ucide curățare. Parse raspunsurile pachetelor si hameiul, in loc sa trateze durata procesului ca RTT. | | `httpDiagnostics.js`Z | Buclă de bucle pentru HTTP/1.1, HTTP/2 și HTTP/3; verificarea strictă a certificatului și familia IP blocată. Fiecare versiune este solicitată independent; versiunea reală este înregistrată. | | `socketDiagnostics.js`Z | Explicit TLS Sonde versiune, limitat TCP conectează / bannere pasiv, pre-autentificare SSH observarea gazdă-cheie folosind dependența ssh2 existente și validarea opțională RFC 6455 Upgrade. | | `diagnosticsService.js` | Rulează și anulează instrumente, selectează/validate adrese, fluxuri progresează, păstrează măsurători parțiale și deține termenul limită de execuție. | | `historyStore.js`Z | Istoricul local delimitat, reactivarea, schema-verificat importurile și exporturile de date măsurate. | ### ICMP și rute Ping implicits la patru cereri individuale executate ICMP ecou. Rezultatele conţin RTT măsurată per ambalaj, numărul de identificare, pierderea, min/average/max, deviaţia standard a populaţiei, diferenţa medie absolută între RTT măsurate consecutiv (jitter), TTL/Hop Limit atunci când sunt tipărite şi ştampile temporale. Un răspuns `<1 ms` este considerat ca fiind primit cu o limită superioară, mai degrabă decât inventând un RTT numeric. RTT-urile necunoscute sunt excluse din statisticile privind latența. Statisticile folosesc fereastra reținut de cel mult 500 pachete; trimise/received/loss Contele acoperă întreaga cursă. Graficele arată ultimele observații 200, cu simboluri distincte pentru răspunsuri, răspunsuri la subrezoluție, răspunsuri lipsă și cereri/prelucrări explicite. Un răspuns lipsă poate reflecta filtrarea ICMP, pierderea pachetelor sau expirarea timpului; aceste observații nu pot identifica în mod concludent un firewall. Executabilele lipsă, eșecurile permisiunii locale și invocările nevalabile ale instrumentelor sunt erori de instrumente separate, nu pierderi de pachete sau inconveniente ale serverelor. Nu se solicită escaladarea privilegiilor. Trasarea fluxurilor de hamei, adrese, sonde individuale, mijloace și procente observate fără răspuns-sondă. Reversul DNS este rezolvat după rută, utilizând responser-ul selectat. Repetițiile compară secvențele observate de adrese hop; diferențele pot reflecta echilibrarea sarcinii. Hoppingul intermediar fără răspuns nu stabileşte o rută ruptă. Metadatele și metoda sondei brute apar în detalii expandabile. macOS necesită o aşteptare de trasare de-a lungul secundă; este înregistrată perioada de timp rotunjită efectivă. ### DNS Cele douăsprezece tipuri de înregistrări sunt A, AAAA, CNAME, MX, NS, TXT, SOA, SRV, CAA, PTR, DS și DNSKEY. DNS fire parsing controale tranzacție / identitate întrebare, dimensiuni record, bucle punct de compresie și limite de mesaje. Răspunsurile păstrează înregistrările TTL, calendarul de interogare, responsor și NXDOMAIN/NODATA/SERVFAIL/refused/timeout states. Căutarea adreselor OS nu poate furniza TTL; interogarea separată a înregistrărilor poate. CNAME urmează să fie delimitată la opt legături cu detectarea ciclului. Coerența repetă răspunsurile A/AAAA de la responsorul selectat și efectuează PTR confirmat înainte pentru testele DNS IP-literale. Răspunsurile modificate sunt observații, nu dovada unei defecțiuni DNS. Întrebările pentru SRV folosesc numele țintă dat; introduceți un nume de serviciu, cum ar fi `_service._tcp.example.org`, atunci când este necesar. DNSSEC este întotdeauna **not validat**. Prezenţa DS/DNSKEY şi chiar şi steagul AD al unui soluţionar nu sunt niciodată tratate ca validări independente. ### HTTP, performanță și compresie HTTP/1.1 acceptă această versiune ca fiind susținută doar atunci când a fost efectiv returnată. HTTPS HTTP/2 necesită negocieri h2; nu se reetichetează nicio rezervă. Cleartext HTTP/2 utilizează cunoștințe anterioare, nu o sondă HTTP/1.1 Upgrade. Verificarea TLS rămâne strictă pentru fiecare cerere HTTP/WebSocket. Redirecționările manuale sunt limitate la opt; bucle, destinații invalide și redirecționări excesive nu reușesc în mod explicit. Întregul lanț înregistrează modificări ale domeniului și diminuări HTTPS; schemele și modificările www sunt vizibile în URL-urile sursă/destinație. Se resping sistemele de redirecționare a certificatelor și a celor care nu fac parte din HTTP (S). Fiecare redirecţionare cross-host este rezolvată independent prin intermediul soluţionarului selectat şi al familiei IP solicitate. Măsurătorile includ DNS (atunci când a fost efectuată), TCP, TLS, TTFB final-răspuns, TTFD general, inclusiv DNS/redirects, descărcare, redirecționare și timpul total de perete, bytes reale entități, viteza transferului, starea, antetele de răspuns, adresa/portul serverului real, ALPN și reutilizarea verificată a conexiunii. DNS/TCP/TLS fazele neefectuate pe o conexiune blocată sau reutilizată sunt `N/A`, nu zerouri false. QUIC nu are faza TCP; strângerea sa de mână este înregistrată separat. În cazul în care nu se utilizează o metodă de calcul a valorii juste, se aplică următoarele definiții: Acestea sunt calendare server/rețea, nu redare pagini sau scoruri Lighthouse. Fiecare protocol selectat folosește aceeași țintă și repetiții. IPv4/IPv6 și HTTP/HTTPS sunt opțiuni de comparație explicite. Schema alternativă utilizează portul implicit. Fiecare protocol începe un proces independent de pachet-client per eșantion. Refolosirea conexiunii nu este afirmată. Statisticile în timp total includ min/average/median/max/nearest-rank P95 și o rată de eroare separată a transportului/protocolului; codurile de stare HTTP rămân vizibile chiar și atunci când un server returnează cu succes un răspuns 4xx/5xx. Compresia trimite identitate, gzip, deflate, br și (atunci când timpul de funcționare îl susține) zstd ca cereri separate Accept-Encoding. Conţinutul-Encoding trebuie să se potrivească şi decompresia delimitată trebuie să reuşească. Un raport se calculează numai în cazul în care hash corpul decodat, URL-ul final și starea se potrivesc cu valoarea de bază a identității. Codurile ignorate sunt nesusţinute; corpurile schimbătoare/dinamice nu au nici un raport. Aceasta este o observație pentru acel URL/status, nu suport universal server. Controalele de securitate arată prezența și valoarea HTS, CSP, X-Content-Type-Options, Sesitor-Politic, Permisiuni-Policant și X-Frame-Options. O directivă privind cadrele de conducere CSP poate înlocui aceasta din urmă. Prezenţa nu stabileşte că politica este configurată corect sau că site-ul web este securizat. ### Cerințe HTTP/3 și dovezi HTTP/1.1, HTTP/2 și HTTP/3 folosesc același client cu bucle grupate. macOS arm64 şi Linux x64 curl utilizare 8.22.0, OpenSSL 3.5.9, nghttp2 1.70.0, ngtcp2 1.25.0 şi nghttp3 1.18.0. Windows x64 folosește bucl-for-win oficial.se curl-pentru-win 8.22.0_3 clădire statică cu LibreSSL 4.3.3 și aceleași biblioteci HTTP. Nu este necesară nicio rezervă de sistem, descărcare în timp sau permisiune a administratorului. Reteta de constructie reproductibila Windows in amonte este https://github.com/curl/curl-for-win/tree/9d77e31e. Construiește cu `python3 scripts/native/build.py` (Windows: `python scripts/native/build.py`) înainte de ambalare. macOS/Linux necesită instrumente C/C++, CMake, Ninja, Perl, marca și pkg-config. Sursele sunt blocate de versiunea și în amonte SHA-256 în `scripts/native/dependencies.lock.json`. Script-ul verifică fiecare descărcare, stabil leagă bibliotecile de transport terțe părți și nu reușește fără HTTP2/HTTP3/SSL caracteristici. Numai bibliotecile sistemului de operare rămân dinamice. Windows utilizează arhiva binară oficială blocată, nu un stiva de transport Windows compilat local. Dosarul CA grupat are haşişul său fixat; licenţele componentelor şi provenienţa de construcţie din amonte însoţesc timpul de funcţionare. Clientul și magazinul de încredere sunt instalate în afara aplicației.asar în `resources/native-runtime/-/`. Fiecare diagnostic verifică hașiile componentelor, arhitectura și capacitățile executabile înainte de utilizare. Config fişiere, proxy-uri, TLS mediu de încredere suprascrieri şi variabilele de injectare bibliotecă sunt excluse. rulaje bucle cu o cale absolută, coajă dezactivată, încredere AC verificate, o familie IP rezolvată explicit, fără cookie-uri, nici redirecţionări automate, şi limitat de ieşire şi timp. Redirecționările sunt validate și re-rezolvate prin cerere. HTTPS în alte porturi decât 443 este suportat. HTTP/3 folosește `--http3-only` și este confirmat numai după un transfer complet de raportare HTTP versiunea 3 şi verificarea cu succes a certificatului. Răspunsurile de eroare HTTP, cum ar fi 404 pot confirma protocolul. Alt-Svc este o reclamă, nu o dovadă. Timeout QUIC, eşecul certificatului, eroarea DNS, refuzul conexiunii, protocolul incompatibil şi eşecul componentelor rămân distincte. Un timeout UDP lasă suport server neverificat. Timpul de strângere de mână QUIC nu este raportat ca sincronizare TCP. Fiecare măsurătoare începe un proces/conexiune separată. Opțiunea caldă nu pretinde reutilizarea conexiunii pentru clientul grupat. Acest lucru păstrează comparații protocol consistent. Rapoartele includ versiuni, capabilități de execuție, verificare TLS și sincronizare QUIC, în timp ce istoricul/exportul elimină corpurile, interogările URL și antetele de autentificare. Actualizați aceste ace și reconstruiți fiecare platformă sprijinită atunci când actualizați stiva de transport sau depozitul de încredere CA. Artefactele publicate şi fotografiile de la sursă sunt imuabile. ## Central IPC Preload expune doar `window.chjCore.diagnostics`; toți manipulatorii păstrează verificarea de la expeditorul principal existentă și lucrările de rețea rămân în principal. Rezultatele folosesc `{ ok: true, value }` sau `{ ok: false, error: { code, message } }`. | Channel / preload Method | Încărcătură utilă / rezultat | | --- | --- | | `diagnostics:resolve` / `resolve(options)` | Ţinta/setări validate → ţintă şi adrese rezolvate. Cel mult două cereri de rezoluţie concurente. | | `diagnostics:start` / `start(options)` | Obiectiv validat/settings/tool selecție → ID-ul de locuri de muncă opace și raportul inițial. | | `diagnostics:cancel` / `cancel(id, tool?)`Z | Anulează un instrument activ/queued sau întreaga cursă. | | `diagnostics:get` / `get(id)` | Snapshot de un run cunoscut sau a salvat raport. | | `diagnostics:history` / `history()` | Sinteza istoriei locale. | | `diagnostics:removeHistory` / `removeHistory(id)` | Elimină elementul de istorie selectat. | | `diagnostics:copy` / `copy(id, format)` | Main scrie un raport cunoscut în clipboard. | | `diagnostics:export` / `export(id, format)` | JSON/CSV/TXT prin dialog nativ de salvare; randorul nu poate furniza o cale sistem de fișiere. | | `diagnostics:import` / `import()` | Culegător de fișiere nativ, dimensiune/schema/depth Validarea și reacțiunea înainte de depozitare. | | `diagnostics:progress` / `onProgress(callback)` | Adrese soluţionate, instrumente de pornire/finalizare, pachete, hamei, eşantioane HTTP şi completare; returnează un apel fără subscripţie. | Nu este expusă nicio coajă generică, sistem de fișiere sau rețea API. Izolarea contextului, nisipul, integrarea nodului dezactivat și randorul existent CSP rămân activate. Contractele de modulare existente și verificarea/excepțiile actualizărilor sunt neschimbate. ## Bugete și date locale - O singură cursă, două instrumente active, cel mult două sonde IP-family per instrument; TCP limitează în plus fiecare adresă la patru conexiuni. - Pauză de funcționare 250–30000 ms; 1–100 pachete; 1–20 repetiții; 1–40 hamei; 1–16 Porturi. Ruleaza regulat opri la cinci minute; ping continuu la treizeci de minute. Subprocesul traseroute are un alt capac 180-secundă. - Ieșirea procesului în mod normal 256 KiB; HTTP entity body 2 MiB; corpul decompresat 8 MIB; antetele HTTP delimitate; niciun organism de răspuns nu intră în istorie. - Mentineti la cele mai multe pachete 500/evenimente progres, cinci rulaje in-memorie, treizeci de rapoarte istorice si 10 MiB de istorie. Istoria folosește scriitorul atomic privat existent la `/diagnostics/history.json` (mod 0600). - Importurile sunt cel mult 2 MiB, schema 1, cu cuiburi delimitate și colecții de rezultate validate. Celulele CSV sunt scăpate şi formulele prefixează neutralizate. Întrebările/fragmentele URL, acreditările, cookie-urile, antetele de autentificare și organismele prime sunt excluse din rapoartele stocate/copied/exported. Detaliile brute arată date structurate măsurate, nu un organism de captare a pachetelor sau răspuns reținut. - Fără sincronizare în cloud, login automat, modificări de configurare a serverului sau scanare agresivă/nelegată. Utilizatorul alege în mod explicit ținta/ports/resolver. ## Cerințe privind platforma și verificarea | Platforma | ICMP | Route | Alte protocoale | | --- | --- | --- | --- | | Windows 10/11 | `ping.exe -4/-6` | `tracert.exe -4/-6`, ICMP | Cu o grosime de maximum 0,75 mm curl.exe cu HTTP/2 şi HTTP/3. Câmpurile RTT localizate nu depind de cuvântul | | macOS | `/sbin/ping`, `/sbin/ping6` | `/usr/sbin/traceroute`, `/usr/sbin/traceroute6`, UDP; wait-togem secunde | Cu bucle cu bucle HTTP/2 şi HTTP/3. | | Ubuntu/LinuxZ| iputils `ping -4/-6` | standard `traceroute -4/-6`, UDP | Buclet cu HTTP/2 și HTTP/3; instrumentele ICMP/rută lipsă sunt raportate separat. | Nu s-a adăugat nicio dependenţă NPM. Implementarea utilizează built-in-uri Node și ssh2 existent aplicatiei. Ea nu instalează instrumente de sistem și nici nu solicită drepturi administrative. Firewall-urile și restricțiile UDP pot împiedica stabilirea unui test de sprijin; acestea nu pot fi deduse dintr-o singură pauză. Acoperirea automată este în `diagnosticsCore.test.js`, `diagnosticsNetwork.test.js`, `diagnosticsHttp.test.js` şi `diagnosticsIpc.test.js`: validare/IPv6 literale, native/locale DNS UDP+TCP, raspunsuri disparute/dule-familie si erori de rezolvare, CNAME/consistenta, argumente/echipamente OS, procese reale limitate pentru copii, observatii ICMP blocate, observatii locale reale HTTP/1.1 şi TLS h2, redirecționări/limitări ale corpului/timeouts/reuse, compresiune activată/ignorată; HTTP3 capacitatea/rezultatul succesului parsing/refuz de retragere, încrederea locală CA/mismatch/expiration şi real IPv6 HTTP/HTTPS, conexiune TCP/refused/mock timeout, WebSocket real și SSH strângere de mână pre-autentificare, anulare/cleanup/partial rezultatele, starea offline, istoria privată rotund-trip/import respingerea/exporturile, IPC de încredere și abonamente preîncărcare. `npm test` ruleaza teste deterministe fara servere publice de testare. `npm run test:diagnostics:ui` ruleaza `scripts/smokeDiagnostics.js` intr-un desktop grafic Electron, folosind productia U/preload/IPC si sondele reale de HTTP/compresie locale. Serviciile fără legătură sunt blocate/offline numai în acest ham de testare. Acesta verifică ordinea de navigație, rezultatele protocolului, persistența, CZ/DE/EN, atât temele, îngustă-fereastra deversare și preferințele Sandbox. În cazul în care cochilia stabilește ELECTRON_RUN_AS_NODE, destabilizați-l pentru această comandă. Verificarea curentă a timpului de funcționare acoperă transferurile controlate ale QUIC; IPv4/IPv6, HTTPS on a non-default port; 404 răspunsuri; TLS eșecuri și o publicitate TCP numai pentru servicii Alt-Svc. Rezultatele per-build însoţesc fiecare versiune. Limitele opționale explicite: nu există o validare independentă a DNSSEC (necesită un ciclu de viață complet de validare a rezolvatorului/ancorei de încredere), nici un audit al Lighthouse (numai serviciul/rețea de sincronizare), fără depreciere TLS audit sau revocare/serviciu TC, nr. HTTP3 cerere cald-reutilizare, și nu HTTP/3 măsurătoare cu reutilizare caldă. Capacitățile nesusținute sunt afișate mai degrabă decât simulate. ## Fișiere în această modificare Creat: cele şapte fişiere de service din `src/main/diagnostics/`; `src/renderer/diagnostics.js`, `diagnosticsI18n.js`, `diagnostics.css`; cele patru `test/diagnostics*.test.js` fișiere; cinci fișiere sub `test/fixtures/diagnostics/`; `scripts/smokeDiagnostics.js`; acest document. Integrată/actualizată: `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`, rădăcină `README.md`, `.gitignore` (patru excepţii de la dotarea publică) şi root gitleaks permit lista îngust numirea publicului în mod deliberat TLS dispozitiv de testare-cheie. Cheia privată CA semnată a fost eliminată; dispozitivul nu este utilizat niciodată de perioada de aplicare.