> La revisione linguistica di questa traduzione è in corso. In caso di dubbi, consultare l’[originale inglese](https://www.sm.ch-j.eu/docs/i18n/en/server-diagnostics.md). # Diagnostica del server Integrato nella barra laterale centrale, nell'ordine Plugins → Diagnostica del server → Hash & Checksum. Non richiede alcuna sessione SSH o plugin scaricato. Tutti i codici runtime, test e dispositivi vivono in `app/`; il modulo non ha alcuna dipendenza dai repository dei fratelli. Il repository non ha `doc.md`, quindi questo documento e entrambi i README descrivono l'implementazione. ## Flusso di lavoro dell'utente Inserire un nome host, IPv4, IPv6 o HTTP(S)/WS(S) URL. Nome host nudo/IP predefiniti su HTTPS; gli URL espliciti mantengono il loro percorso, interrogazione e porta durante la richiesta. Le credenziali in URL, schemi non supportati, caratteri whitespace/control e hostname simili a shell sono rifiutate. I caratteri IPv6 sono parentesi automaticamente; gli identificatori di zona locali/scoped/link non sono supportati dal parser URL. Scegliere Auto (preferire IPv4, altrimenti IPv6), IPv4 o IPv6. Risolvere gli indirizzi per scegliere una risposta particolare corrente. La panoramica mostra tutte le risposte risolte; le sonde testano l'indirizzo selezionato o un indirizzo per famiglia richiesta. Entrambe le famiglie sono misurate in modo indipendente. La presenza di AAAA da sola non implica mai il funzionamento della connettività IPv6. Run Diagnostics esegue DNS, ping, traceroute, HTTP, compressione, TLS e le porte TCP selezionate. WebSocket è opt-in. Ogni strumento ha anche un controllo Run/Stop separato. Una prova diagnostica può essere attiva contemporaneamente. Una corsa completata significa che gli strumenti sono finiti, non che ogni sonda è riuscita. Non c'è nessuna coperta del server offline verdetto del galattosio. Timeout, conteggio pacchetti, ripetizioni, massimo luppolo, risolutore DNS, selezione protocollo, connessione calda e confronto HTTP/HTTPS sono configurabili. Cambiare l'obiettivo cancella un IP precedentemente selezionato. La cronologia può riaprire, confrontare due report, eliminare, importare JSON, copiare o esportare JSON/CSV/TXT attraverso le finestre di dialogo del nucleo nativo. Il tema Light/dark/system si applica alla sezione diagnostica ed è salvato nella configurazione UI esistente. CZ/DE/EN segue immediatamente la lingua di applicazione. ## Comportamento dei componenti e del protocollo | Componente | Implementazione e interpretazione | | --- | --- | | `common.js` | Convalida obiettivi/opzioni, limiti e valori dell'enum; conversione IDNA; le statistiche numeriche escludono valori sconosciuti. | | `dnsDiagnostics.js` La risoluzione degli indirizzi del sistema | utilizza `dns.lookup` per onorare la configurazione del sistema operativo e i file di host. Registra le query utilizzando UDP DNS limitato con ripiego TCP per risposte troncate contro `dns.getServers()`, o il risolutore personalizzato/pubblico esplicitamente scelto. Nessun passaggio implicito a DNS pubblico. | | `processTools.js` | Esegui ping/traceroute con un array di argomenti e `shell: false`, output limitato, timeout esplicito e pulizia dell'interruzione/kill. Analizza le risposte ai pacchetti e il luppolo, piuttosto che trattare la durata del processo come RTT. | | `httpDiagnostics.js` Nastro arricciato | per HTTP/1.1, HTTP/2 e HTTP/3; rigorosa verifica dei certificati e famiglia IP bloccata. Ogni versione è richiesta indipendentemente; la versione reale viene registrata. | | `socketDiagnostics.js` | Sonde di versione esplicita TLS, connessioni TCP delimitate/banner passivi, osservazione host-key SSH pre-autenticazione utilizzando la dipendenza ssh2 esistente e convalida opzionale RFC 6455 per l'aggiornamento. | | `diagnosticsService.js`Z | esegue e annulla gli strumenti, seleziona/convalida gli indirizzi, i flussi in corso, conserva le misure parziali e possiede la scadenza di esecuzione. | | `historyStore.js` | Storia locale delimitata, redazione, importazioni con schema controllato ed esportazioni di dati misurati. | ### ICMP e rotte Ping defaults a quattro richieste di eco ICMP eseguite singolarmente. I risultati contengono RTT misurato per packet, conteggio ricevuto/inviato, perdita, min/average/max, deviazione standard della popolazione, differenza assoluta media tra RTT misurati consecutivi (jitter), limite TTL/Hop quando stampato e timestamp. Una risposta `<1 ms` viene contata come ricevuta con un limite superiore, piuttosto che inventare una RTT numerica. Le RTT sconosciute sono escluse dalle statistiche della latenza. Le statistiche usano la finestra mantenuta dei pacchetti 500; i conteggi sent/received/loss coprono l'intera esecuzione. I grafici mostrano le ultime osservazioni 200, con simboli distinti per le risposte, le risposte a sub-risoluzione, le risposte mancanti e i timeout espliciti di richiesta/processo. Una risposta mancante può riflettere il filtraggio ICMP, la perdita di pacchetti o il timeout; queste osservazioni non possono identificare un firewall in modo definitivo. Gli eseguibili mancanti, le autorizzazioni locali fallite e le invocazioni non valide sono errori di strumenti separati, non perdita di pacchetti o indisponibilità del server. Non è richiesta alcuna escalation dei privilegi. Traceroute flussi luppolo, indirizzi, singole sonde, mezzi e osservato senza risposta-sonda percentuali. Inverti DNS viene risolto dopo il percorso, utilizzando il risolutore selezionato. Le ripetizioni confrontano le sequenze osservate di indirizzo hop; le differenze possono riflettere il bilanciamento del carico. Il luppolo intermedio senza risposta non stabilisce una rotta rotta. I metadati e il metodo delle sonde grezzi appaiono in dettagli espandibili. macOS richiede l'attesa di traceroute interi-secondi; viene registrato il timeout effettivo arrotondato. ### DNS I dodici tipi di record sono A, AAAA, CNAME, MX, NS, TXT, SOA, SRV, CAA, PTR, DS e DNSKEY. L'analisi del filo DNS verifica l'identità di transazione/domanda, le dimensioni dei record, i loop di compressione e i limiti dei messaggi. Le risposte conservano record TTL, tempi di query, risolutore e stati NXDOMAIN/NODATA/SERVFAIL/refused/timeout. La ricerca di indirizzi OS non può fornire TTL; la query di record separata può. CNAME che segue è limitato a otto collegamenti con il rilevamento del ciclo. Coerenza ripete le risposte A/AAAA dal risolutore selezionato ed esegue PTR confermato in avanti per i test IP-literal DNS. Le risposte modificate sono osservazioni, non prove di un guasto DNS. Le richieste per SRV usano il nome di destinazione come indicato; inserisci un nome di servizio come `_service._tcp.example.org` quando necessario. DNSSEC è sempre **not validato**. La presenza di DS/DNSKEY e anche il flag AD di un risolutore non vengono mai trattati come convalida indipendente. ### HTTP, prestazioni e compressione HTTP/1.1 accetta questa versione come supportata solo quando è stata effettivamente restituita. HTTPS HTTP/2 richiede h2 negoziato; nessun ripiego viene rietichettato. Cleartext HTTP/2 utilizza conoscenze precedenti, non una sonda di aggiornamento HTTP/1.1. La verifica TLS rimane rigorosa per ogni richiesta HTTP/WebSocket. I reindirizzamenti manuali sono limitati a otto; loop, destinazioni non valide e reindirizzamenti eccessivi falliscono esplicitamente. L'intera catena registra cambiamenti di dominio trasversale e declassamenti HTTPS; gli schemi e le modifiche www sono visibili negli URL sorgente/destinazione. I regimi di crediti e non-HTTP(S) redirect sono respinti. Ogni reindirizzamento cross-host viene risolto in modo indipendente attraverso il risolutore selezionato e la famiglia IP richiesta. Le misure includono DNS (quando eseguita), TCP, TLS, TTFB risposta finale, TTB totale inclusi DNS/redirects, download, redirect e tempo totale della parete, byte dell'entità reale, velocità di trasferimento, stato, intestazioni di risposta, indirizzo del server effettivo/porta, ALPN e riutilizzo verificato della connessione. Le fasi DNS/TCP/TLS non eseguite su una connessione pinned o riutilizzata sono `N/A`, non zeri falsi. QUIC non ha fase TCP; la sua stretta di mano viene registrata separatamente. Il trasferimento di intestazione o la copertura integrale del filo non è affermato come misura dell'entità-byte. Questi sono tempi server/network, non rendering di pagine o punteggi del faro. Ogni protocollo selezionato usa lo stesso obiettivo e ripetizioni. IPv4/IPv6 e HTTP/HTTPS sono opzioni di confronto esplicite. Lo schema alternativo utilizza la porta predefinita. Ogni protocollo avvia un processo indipendente per ogni singolo campione. Il riutilizzo della connessione non viene affermato. Le statistiche del tempo totale includono min/average/median/max/nearest-rank P95 e una velocità di errore separata tra trasporto e protocollo; i codici di stato HTTP rimangono visibili anche quando un server restituisce con successo una risposta 4xx/5xx. La compressione invia identità, gzip, deflate, br e (quando il runtime lo supporta) zstd come richieste separate di accettazione-codifica. La codifica dei contenuti deve corrispondere e la decompressione limitata deve avere successo. Un rapporto è calcolato solo se l'hash del corpo decodificato, l'URL finale e lo stato corrispondono alla linea di base dell'identità. Le codifiche ignorate non sono supportate; i corpi cambianti/dinamici non hanno alcun rapporto. Questa è un'osservazione per quell'URL/status, non il supporto universale del server. I controlli di sicurezza mostrano la presenza e il valore di HSTS, CSP, X-Content-Type-Options, Referer-Policy, Permissions-Polics e X-Frame-Options. Una direttiva CSP frame-anters può sostituire quest'ultima. La presenza non stabilisce che la politica sia correttamente configurata o che il sito web sia sicuro. ### Requisiti HTTP/3 e prova HTTP/1.1, HTTP/2 e HTTP/3 utilizzano lo stesso client arricciatura bundle. macOS arm64 e Linux x64 uso arricciatura 8.22.0, OpenSSL 3.5.9, nghttp2 1.70.0, ngtcp2 1.25.0 e nghttp3 1.18.0. Windows x64 utilizza la versione ufficiale curl.se curl-for-win 8.22.0_3 con LibreSSL 4.3.3 e le stesse librerie HTTP. Non è necessario alcun ripiego del sistema, download runtime o autorizzazione dell'amministratore. La ricetta di generazione riproducibile a monte Windows è https://github.com/curl/curl-for-win/tree/9d77e31e. Costruisci con `python3 scripts/native/build.py` (Windows: `python scripts/native/build.py`) prima della confezione. macOS/Linux richiede strumenti C/C++, CMake, Ninja, Perl, make e pkg-config. Le fonti sono bloccate dalla versione e dall'alto SHA-256 in `scripts/native/dependencies.lock.json`. Lo script verifica ogni download, collega staticamente le librerie di trasporto di terze parti e fallisce senza HTTP2/HTTP3/SSL. Solo le librerie del sistema operativo rimangono dinamiche. Windows utilizza l'archivio binario ufficiale, non uno stack di trasporto Windows compilato localmente. Il file CA in bundle ha il suo hash; le licenze dei componenti e la provenienza upstream build accompagnano il runtime. Il client e il Trust Store sono installati al di fuori di app.asar in `resources/native-runtime/-/`. Ogni diagnostica verifica i hash dei componenti, l'architettura e le funzionalità eseguibili prima dell'uso. Sono esclusi file di configurazione, proxy, ambienti di fiducia TLS overrides e variabili di iniezione libreria. curl funziona con un percorso assoluto, shell disabilitato, CA trust verificato, una famiglia di IP risolti esplicitamente, nessun cookie, nessun reindirizzamento automatico, uscita e tempo limitati. I redirect sono convalidati e ri-risolti dall'applicazione. HTTPS su porte diverse da 443 è supportato. HTTP/3 utilizza `--http3-only` ed è confermato solo dopo aver completato il trasferimento riportando la versione HTTP 3 e verifica del certificato. Le risposte di errore HTTP come 404 possono confermare il protocollo. Alt-Svc è un annuncio pubblicitario, non una prova. Il timeout QUIC, il mancato certificato, il fallimento DNS, il rifiuto della connessione, il protocollo incompatibile e il guasto del componente rimangono distinti. Un timeout UDP lascia il supporto del server non verificato. Il tempo di stretta di mano QUIC non è riportato come tempo TCP. Ogni misura inizia un processo/connessione separato. L'opzione warm non richiede il riutilizzo della connessione per il client in bundle. Questo mantiene i confronti di protocollo coerenti. I report includono versioni runtime, funzionalità, verifica TLS e tempi QUIC, mentre cronologia/esportazione rimuove i corpi, le query URL e le intestazioni di autenticazione. Aggiornare questi pin e ricostruire ogni piattaforma supportata durante l'aggiornamento dello stack di trasporto o CA trust store. Gli artefatti pubblicati e le istantanee dei sorgenti sono immutabili. ## IPC centrale Preload espone solo `window.chjCore.diagnostics`; tutti i gestori mantengono il controllo del mittente a finestra principale esistente e il lavoro di rete rimane in main. I risultati utilizzano `{ ok: true, value }` o `{ ok: false, error: { code, message } }`. | Canale / metodo di precarico | Payload / risultato | | --- | --- | | `diagnostics:resolve` / `resolve(options)`Z | Convalidato target/impostazioni → target e indirizzi risolti. Al massimo due richieste di risoluzione concorrente. | | `diagnostics:start` / `start(options)`Z | Selezione di target validata/settings/tool → ID lavoro opaco e report iniziale. | | `diagnostics:cancel` / `cancel(id, tool?)` | Annulla uno strumento attivo/queito o l'intera esecuzione. | | `diagnostics:get` / `get(id)` Snapshot | di un'esecuzione o di un report noto. | | `diagnostics:history` / `history()` | Riassunto della storia locale. | | `diagnostics:removeHistory` / `removeHistory(id)` | Rimuovi la cronologia selezionata. | | `diagnostics:copy` / `copy(id, format)` Il Main | scrive un report scritto negli appunti. | | `diagnostics:export` / `export(id, format)`Z | JSON/CSV/TXT tramite finestra di dialogo di salvataggio nativo; il render non può fornire un percorso filesystem. | | `diagnostics:import` / `import()` Scegliere file nativi |, la convalida e la redazione /schema/depth prima di archiviare. | | `diagnostics:progress` / `onProgress(callback)` indirizzi risolti |, avvio/completamento degli strumenti, pacchetti, luppolo, campioni HTTP e completamento; restituisce un callback di annullamento dell'iscrizione. | Nessuna shell generica, filesystem o rete API è esposta. Isolamento contestuale, sandbox, integrazione del nodo disabilitata e il render esistente CSP rimangono abilitati. I contratti di plugin esistenti e la verifica/eccezioni dell'aggiornamento sono immutati. ## Bilancio e dati locali - Una corsa, due strumenti attivi, al massimo due sonde di famiglia IP per strumento; TCP limita inoltre ogni indirizzo a quattro connessioni. - Timeout per operazione 250–30000 ms; pacchetti 1–100, ripetizioni 1–20 , 1–40 luppolo, porte 1–16. Le corse regolari si fermano a cinque minuti; ping continuo a trenta minuti. Il subprocesso traceroute ha un ulteriore tappo 180-secondo. - Uscita di processo normalmente 256 KiB; corpo entità HTTP 2 MiB; corpo decompresso 8MiB; intestazioni HTTP delimitate; nessun corpo di risposta entra nella cronologia. - Resistete alla maggior parte dei pacchetti 500/eventi di progresso, cinque in-memory funziona, trenta report di cronologia e 10 MiB della storia. La storia utilizza lo scrittore atomico privato esistente a `/diagnostics/history.json` (mode 0600). - Le importazioni sono al massimo 2 MiB, schema 1, con nidificazione limitata e collezioni di risultati convalidati. Le cellule CSV sono scampate e i prefissi formula neutralizzati. Le query/frammenti URL, le credenziali, i cookie, le intestazioni di autenticazione e i corpi grezzi sono esclusi dai report memorizzati/copied/exported. I dettagli grezzi mostrano dati strutturati misurati, non un corpo di cattura o mantenimento dei pacchetti. - Nessuna sincronizzazione cloud, login automatico, modifiche di configurazione del server o scansione aggressiva/slegata. L'utente sceglie esplicitamente target/ports/resolver. ## Requisiti della piattaforma e verifica | Piattaforma | ICMP | Route | Altri protocolli | | --- | --- | --- | --- | | Windows 10/11 | `ping.exe -4/-6` | `tracert.exe -4/-6`ICMP | Bundled curl.exe con HTTP/2 e HTTP/3. I campi RTT localizzati non dipendono dalla parola "dimensione temporale." | | macOS | `/sbin/ping`, `/sbin/ping6` | `/usr/sbin/traceroute`, `/usr/sbin/traceroute6`, UDP; intero-secondi attende | Riccioli con bordi HTTP/2 e HTTP/3. | | Ubuntu/Linux | iputil `ping -4/-6` | standard `traceroute -4/-6`, UDP | Riccioli con bordi HTTP/2 e HTTP/3; gli strumenti ICMP/route mancanti sono segnalati separatamente. | Non è stata aggiunta alcuna nuova dipendenza da npm. L'implementazione utilizza i Node built-in e l'applicazione esistente ssh2. Non installa strumenti di sistema né richiede diritti amministrativi. I firewall e le restrizioni UDP possono impedire a un test di stabilire il supporto; non possono essere dedotti da un solo timeout. La copertura automatica è in `diagnosticsCore.test.js`, `diagnosticsNetwork.test.js`, `diagnosticsHttp.test.js` e `diagnosticsIpc.test.js`: convalida/IPv6 letterali, nativo/locale DNS infissi UDP+TCP, risposte mancanti/duali ed errori risolutori, CNAME/cosistenza, infissi per argomenti/parsing OS, processi bambini reali limitati, osservazioni ICMP bloccate, locali reali HTTP/1.1 e TLS h2, reindirizza/limiti corpo/timeouts/reuse, compressione abilitata/ignorata, HTTP3 capacità/risultato di successo analisi/regetto di caduta, fiducia locale CA/mismatch/expiration e reale IPv6 HTTP/HTTPS, connessione TCP/refused/mock timeout, WebSocket reale e SSH strette di mano pre-autenticazione, cancellazione/cleanup/partial risultati, stato offline, storia privata andata e ritorno/importazione rifiuto/esportazioni, IPC di fiducia e abbonamenti precaricati. `npm test` esegue test deterministici senza server di prova pubblici. `npm run test:diagnostics:ui` esegue `scripts/smokeDiagnostics.js` in un desktop grafico Electron, utilizzando la produzione UI/preload/IPC e vere sonde HTTP/compressione locali. I servizi non correlati sono stubbed/offline solo in questo imbrago di prova. Controlla l'ordine di navigazione, i risultati del protocollo, la persistenza, CZ/DE/EN, entrambi i temi, il overflow a finestra stretta e le preferenze sandbox. Se la shell imposta ELECTRON_RUN_AS_NODE, disattivarla per questo comando. La verifica del runtime attuale copre i trasferimenti QUIC controllati, IPv4/IPv6, HTTPS su una porta non predefinita, risposte 404 , guasti TLS e un servizio pubblicitario TCP-only Alt-Svc. I risultati per-build accompagnano ogni release. Limiti facoltativi espliciti: nessuna convalida DNSSEC indipendente (richiede un ciclo di vita completo per validare il risolutore/l'anchor trust), nessun audit del faro (solo per la tempistica del server/della rete), nessun audit o servizio di revoca/CT deprecato TLS, nessun reclamo di recupero termico HTTP3 e nessuna misura di riuso caldo HTTP/3. Le funzionalità non supportate vengono visualizzate piuttosto che simulate. ## File in questa modifica Creato: i sette file di servizio in `src/main/diagnostics/`; `src/renderer/diagnostics.js`, `diagnosticsI18n.js`, `diagnostics.css`; i quattro `test/diagnostics*.test.js` file; cinque file sotto `test/fixtures/diagnostics/`; `scripts/smokeDiagnostics.js`Questo documento. Integrato/aggiornato `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`, radice `README.md`, `.gitignore` (quattro eccezioni per le strutture pubbliche) e le root gitleaks consentono di nominare il pubblico deliberatamente TLS dispositivo chiave di prova. La chiave privata CA della firma è stata scartata; l'apparecchio non viene mai utilizzato dal runtime dell'applicazione.