CH-J Toolsspráva serverů přes SSH
Menu

Diagnostika serveru

Stáhnout soubor

Jazyková revize tohoto překladu probíhá. Při nejasnostech porovnejte anglický originál.

Integrováno do postranního panelu Core v pořadí Pluginy → Diagnostika serveru → Hash & Checksum. Nevyžaduje relaci SSH ani stažený plugin. Veškerý běhový kód, testy a přípravky jsou v app/; modul nezávisí na sousedních repozitářích. Repozitář neobsahuje doc.md, takže implementaci popisuje tento dokument a obě README.

Pracovní postup uživatele

Zadejte název hostitele, IPv4, IPv6 nebo URL HTTP(S)/WS(S). Samotné názvy hostitelů/IP adresy standardně používají HTTPS; výslovně zadané URL si při požadavku zachovávají cestu, parametry a port. Přihlašovací údaje v URL, nepodporovaná schémata, mezery/řídicí znaky a názvy hostitelů připomínající příkazy shellu jsou odmítnuty. Literály IPv6 se automaticky uzavřou do hranatých závorek; identifikátory zón pro scoped/link-local adresy parser URL nepodporuje.

Zvolte Auto (preferuje IPv4, jinak IPv6), IPv4, IPv6 nebo Obě. Přeložením adres můžete vybrat konkrétní aktuální odpověď. Přehled zobrazuje všechny přeložené odpovědi; sondy testují vybranou adresu nebo jednu adresu z každé požadované rodiny. Obě rodiny se měří nezávisle. Samotná přítomnost AAAA nikdy neznamená funkční konektivitu IPv6.

Spustit diagnostiku spustí DNS, ping, traceroute, HTTP, kompresi, TLS a vybrané porty TCP. WebSocket je nutné výslovně zapnout. Každý nástroj má také vlastní ovládání Spustit/Zastavit. Současně může běžet jen jeden diagnostický běh. Dokončený běh znamená, že nástroje skončily, nikoli že každá sonda uspěla. Neexistuje žádný paušální verdikt „server je offline“.

Časový limit, počet paketů, opakování, maximální počet skoků, resolver DNS, výběr protokolu, teplé spojení a srovnání HTTP/HTTPS lze nastavit. Změna cíle vymaže dříve vybranou IP adresu. Historie umožňuje znovu otevřít, porovnat dva reporty, mazat, importovat JSON, kopírovat nebo exportovat JSON/CSV/TXT pomocí nativních dialogů Core. Světlý/tmavý/systémový motiv platí pro sekci diagnostiky a ukládá se do stávající konfigurace UI. CZ/DE/EN se okamžitě řídí jazykem aplikace.

Komponenty a chování protokolů

Komponenta Implementace a interpretace
common.js Ověřuje cíle/volby, limity a výčtové hodnoty; převod IDNA; číselné statistiky vynechávají neznámé hodnoty.
dnsDiagnostics.js Systémové překlady adres používají dns.lookup, aby respektovaly konfiguraci systému a soubory hosts. Dotazy na záznamy používají omezené UDP DNS s náhradou přes TCP u zkrácených odpovědí vůči dns.getServers() nebo výslovně zvolenému vlastnímu/veřejnému resolveru. Žádné implicitní přepnutí na veřejné DNS.
processTools.js Spouští systémový ping/traceroute s polem argumentů a shell: false, s omezeným výstupem, výslovným časovým limitem a úklidem při přerušení/ukončení. Parsuje odpovědi paketů a skoky, místo aby dobu běhu procesu považoval za RTT.
httpDiagnostics.js Přibalený curl pro HTTP/1.1, HTTP/2 a HTTP/3; striktní ověřování certifikátů a připnutá rodina IP. Každá verze se požaduje nezávisle; zaznamená se skutečná verze.
socketDiagnostics.js Výslovné sondy verzí TLS, omezená spojení TCP/pasivní bannery, sledování klíče hostitele SSH před autentizací pomocí stávající závislosti ssh2 a volitelné ověření Upgrade podle RFC 6455.
diagnosticsService.js Spouští a ruší nástroje, vybírá/ověřuje adresy, průběžně předává postup, zachovává dílčí měření a spravuje termín běhu.
historyStore.js Verzovaná omezená místní historie, skrývání citlivých údajů, importy se kontrolou schématu a exporty naměřených dat.

ICMP a trasy

Ping standardně provede čtyři samostatně spuštěné požadavky ICMP echo. Výsledky obsahují naměřené RTT jednotlivých paketů, počty přijatých/odeslaných, ztrátu, min/průměr/max, populační směrodatnou odchylku, průměrný absolutní rozdíl mezi po sobě jdoucími naměřenými RTT (jitter), TTL/Hop Limit, pokud je vypsán, a časová razítka. Odpověď <1 ms se počítá jako přijatá s horní mezí, místo aby se vymýšlelo číselné RTT. Neznámá RTT se do statistik latence nezapočítávají. Statistiky používají ponechané okno nejvýše 500 paketů; počty odeslaných/přijatých/ztracených pokrývají celý běh. Grafy zobrazují posledních 200 pozorování s odlišnými symboly pro odpovědi, odpovědi pod rozlišením, chybějící odpovědi a výslovná vypršení času požadavku/procesu.

Chybějící odpověď může znamenat filtrování ICMP, ztrátu paketů nebo vypršení času; z těchto pozorování nelze jednoznačně určit firewall. Chybějící spustitelné soubory, místní chyby oprávnění a neplatná volání nástrojů jsou samostatné chyby nástroje, nikoli ztráta paketů nebo nedostupnost serveru. Nevyžaduje se žádné zvýšení oprávnění.

Traceroute průběžně předává skoky, adresy, jednotlivé sondy, průměry a pozorované procento nezodpovězených sond. Reverzní DNS se překládá po dokončení trasy pomocí zvoleného resolveru. Opakování porovnávají pozorované posloupnosti adres skoků; rozdíly mohou odrážet vyrovnávání zátěže. Nezodpovězené mezilehlé skoky neprokazují přerušenou trasu. Nezpracovaná metadata sond a metoda jsou v rozbalitelných podrobnostech. macOS vyžaduje u traceroute čekání v celých sekundách; zaznamená se skutečný zaokrouhlený časový limit.

DNS

Dvanáct typů záznamů je A, AAAA, CNAME, MX, NS, TXT, SOA, SRV, CAA, PTR, DS a DNSKEY. Parsování formátu DNS kontroluje identitu transakce/dotazu, velikosti záznamů, smyčky kompresních ukazatelů a limity zpráv. Odpovědi zachovávají TTL záznamů, časování dotazu, resolver a stavy NXDOMAIN/NODATA/SERVFAIL/refused/timeout. Systémové překlady adres TTL poskytnout nemohou; samostatný dotaz na záznam ano.

Sledování CNAME je omezeno na osm odkazů s detekcí cyklů. Kontrola konzistence opakuje odpovědi A/AAAA ze zvoleného resolveru a u testů DNS pro IP literály provádí dopředně potvrzený PTR. Změněné odpovědi jsou pozorováním, nikoli důkazem chyby DNS. Dotazy na SRV používají cílový název tak, jak byl zadán; v případě potřeby zadejte název služby, například _service._tcp.example.org. DNSSEC je vždy neověřené. Přítomnost DS/DNSKEY ani příznak AD resolveru se nikdy nepovažují za nezávislé ověření.

HTTP, výkon a komprese

HTTP/1.1 považuje tuto verzi za podporovanou pouze tehdy, když byla skutečně vrácena. HTTPS HTTP/2 vyžaduje vyjednané h2; žádná náhrada se nepřeznačuje. Nešifrované HTTP/2 používá prior knowledge, nikoli sondu HTTP/1.1 Upgrade. Ověřování TLS zůstává striktní u každého požadavku HTTP/WebSocket.

Ruční přesměrování jsou omezena na osm; smyčky, neplatné cíle a nadměrná přesměrování výslovně selžou. Celý řetězec zaznamenává změny domén a downgrade z HTTPS; změny schématu a www jsou vidět ve zdrojových/cílových URL. Přihlašovací údaje a jiná schémata přesměrování než HTTP(S) jsou odmítnuty. Každé přesměrování na jiného hostitele se překládá nezávisle přes zvolený resolver a požadovanou rodinu IP.

Měření zahrnují DNS (pokud bylo provedeno), TCP, TLS, TTFB konečné odpovědi, celkové TTFB včetně DNS/přesměrování, stahování, přesměrování a celkový čas, skutečné bajty těla, rychlost přenosu, stav, hlavičky odpovědi, skutečnou adresu/port serveru, ALPN a ověřené opakované použití spojení. Fáze DNS/TCP/TLS, které na připnutém nebo znovu použitém spojení neproběhly, jsou N/A, nikoli falešné nuly. QUIC nemá fázi TCP; jeho handshake se zaznamenává zvlášť. Přenos hlaviček ani celková režie na lince se nevydávají za měření bajtů těla. Jde o časování serveru/sítě, nikoli o vykreslení stránky nebo skóre Lighthouse.

Každý zvolený protokol používá stejný cíl a opakování. IPv4/IPv6 a HTTP/HTTPS jsou výslovné volby srovnání. Alternativní schéma používá svůj výchozí port. Každý protokol spouští pro každý vzorek nezávislý proces přibaleného klienta. Opakované použití spojení se netvrdí. Statistiky celkového času zahrnují min/průměr/medián/max/P95 metodou nejbližšího pořadí a samostatnou míru chyb transportu/protokolu; stavové kódy HTTP zůstávají viditelné, i když server úspěšně vrátí odpověď 4xx/5xx.

Komprese posílá identity, gzip, deflate, br a (pokud to běhové prostředí podporuje) zstd jako samostatné požadavky Accept-Encoding. Content-Encoding musí odpovídat a omezená dekomprese musí uspět. Poměr se počítá pouze tehdy, když hash dekódovaného těla, konečná URL a stav odpovídají výchozí odpovědi identity. Ignorovaná kódování jsou nepodporovaná; měnící se/dynamická těla poměr nemají. Jde o pozorování pro danou URL/stav, nikoli o obecnou podporu serveru.

Kontroly bezpečnostních hlaviček zobrazují přítomnost a hodnotu HSTS, CSP, X-Content-Type-Options, Referrer-Policy, Permissions-Policy a X-Frame-Options. Direktiva CSP frame-ancestors může poslední z nich nahradit. Přítomnost neprokazuje, že je zásada správně nastavena nebo že je web bezpečný.

Požadavky na HTTP/3 a jeho prokázání

HTTP/1.1, HTTP/2 a HTTP/3 používají stejného přibaleného klienta curl. macOS arm64 a Linux x64 používají curl 8.22.0, OpenSSL 3.5.9, nghttp2 1.70.0, ngtcp2 1.25.0 a nghttp3 1.18.0. Windows x64 používá oficiální statické sestavení curl-for-win 8.22.0_3 z curl.se s LibreSSL 4.3.3 a stejnými knihovnami HTTP. Není potřeba žádný záložní systémový curl, stahování za běhu ani oprávnění správce. Reprodukovatelný postup sestavení pro Windows od autorů je https://github.com/curl/curl-for-win/tree/9d77e31e .

Před zabalením sestavte prostředí příkazem python3 scripts/native/build.py (Windows: python scripts/native/build.py). macOS/Linux vyžadují nástroje C/C++, CMake, Ninja, Perl, make a pkg-config. Zdroje jsou připnuty verzí a SHA-256 od autorů v scripts/native/dependencies.lock.json. Skript ověřuje každé stažení, staticky linkuje transportní knihovny třetích stran a selže, pokud chybí funkce HTTP2/HTTP3/SSL. Dynamické zůstávají pouze knihovny operačního systému. Windows používá připnutý oficiální binární archiv, nikoli lokálně zkompilovaný transportní stack pro Windows. Přibalený soubor CA má vlastní připnutý hash; licence komponent a původ sestavení od autorů jsou dodávány spolu s běhovým prostředím.

Klient a úložiště důvěryhodných certifikátů jsou nainstalovány mimo app.asar v resources/native-runtime/<platform>-<arch>/. Každá diagnostika před použitím ověří hashe komponent, architekturu a schopnosti spustitelného souboru. Konfigurační soubory, proxy, přepsání důvěry TLS z prostředí a proměnné pro vkládání knihoven jsou vyloučeny. curl běží s absolutní cestou, bez shellu, s ověřenou důvěrou CA, s výslovně určenou rodinou přeložené IP adresy, bez cookies, bez automatických přesměrování a s omezeným výstupem i časem. Přesměrování ověřuje a znovu překládá aplikace. HTTPS na jiných portech než 443 je podporováno.

HTTP/3 používá --http3-only a je potvrzeno teprve po dokončeném přenosu, který hlásí HTTP verze 3, a po úspěšném ověření certifikátu. Protokol mohou potvrdit i chybové odpovědi HTTP, například 404. Alt-Svc je pouze oznámení, nikoli důkaz. Časový limit QUIC, chyba certifikátu, chyba DNS, odmítnutí spojení, nekompatibilní protokol a selhání komponenty se rozlišují. Vypršení času UDP ponechává podporu na serveru neověřenou. Časování handshaku QUIC se nevykazuje jako časování TCP.

Každé měření spouští samostatný proces/spojení. Volba „warm“ u přibaleného klienta netvrdí opakované použití spojení. Díky tomu jsou srovnání protokolů konzistentní. Reporty obsahují verze běhového prostředí, schopnosti, ověření TLS a časování QUIC, zatímco historie a export odstraňují těla odpovědí, parametry URL a autentizační hlavičky.

Při aktualizaci transportního stacku nebo úložiště důvěryhodných certifikátů CA aktualizujte tato připnutí a znovu sestavte všechny podporované platformy. Publikované artefakty a snímky zdrojů jsou neměnné.

IPC v Core

Preload zpřístupňuje pouze window.chjCore.diagnostics; všechny obslužné rutiny zachovávají stávající kontrolu odesílatele hlavního okna a síťová práce zůstává v hlavním procesu. Výsledky používají { ok: true, value } nebo { ok: false, error: { code, message } }.

Kanál / metoda preloadu Data / výsledek
diagnostics:resolve / resolve(options) Ověřený cíl/nastavení → cíl a přeložené adresy. Nejvýše dva souběžné požadavky na překlad.
diagnostics:start / start(options) Ověřený cíl/nastavení/výběr nástrojů → neprůhledné ID úlohy a počáteční report.
diagnostics:cancel / cancel(id, tool?) Zrušení jednoho aktivního/čekajícího nástroje nebo celého běhu.
diagnostics:get / get(id) Snímek známého běhu nebo uloženého reportu.
diagnostics:history / history() Souhrny místní historie.
diagnostics:removeHistory / removeHistory(id) Odstranění vybrané položky historie.
diagnostics:copy / copy(id, format) Hlavní proces zapíše známý report se skrytými údaji do schránky.
diagnostics:export / export(id, format) JSON/CSV/TXT přes nativní dialog uložení; renderer nemůže zadat cestu v souborovém systému.
diagnostics:import / import() Nativní výběr souboru, ověření velikosti/schématu/hloubky a skrytí údajů před uložením.
diagnostics:progress / onProgress(callback) Přeložené adresy, spuštění/dokončení nástrojů, pakety, skoky, vzorky HTTP a dokončení; vrací funkci pro odhlášení odběru.

Nezpřístupňuje se žádné obecné API pro shell, souborový systém ani síť. Izolace kontextu, sandbox, vypnutá integrace Node a stávající CSP rendereru zůstávají zapnuté. Stávající kontrakty pluginů a ověřování/výjimky aktualizátoru se nemění.

Limity a místní data

Požadavky na platformy a ověření

Platforma ICMP Trasa Ostatní protokoly
Windows 10/11 ping.exe -4/-6 tracert.exe -4/-6, ICMP Přibalený curl.exe s HTTP/2 a HTTP/3. Lokalizovaná pole RTT nezávisí na slově „time“.
macOS /sbin/ping, /sbin/ping6 /usr/sbin/traceroute, /usr/sbin/traceroute6, UDP; čekání v celých sekundách Přibalený curl s HTTP/2 a HTTP/3.
Ubuntu/Linux iputils ping -4/-6 standardní traceroute -4/-6, UDP Přibalený curl s HTTP/2 a HTTP/3; chybějící nástroje ICMP/tras se hlásí zvlášť.

Nebyla přidána žádná nová závislost npm. Implementace používá vestavěné moduly Node a stávající ssh2 aplikace. Neinstaluje systémové nástroje ani nežádá o oprávnění správce. Firewally a omezení UDP mohou zabránit tomu, aby test prokázal podporu; samotné vypršení času je neprokazuje.

Automatizované pokrytí je v diagnosticsCore.test.js, diagnosticsNetwork.test.js, diagnosticsHttp.test.js a diagnosticsIpc.test.js: ověření/literály IPv6, nativní/místní přípravky DNS UDP+TCP, chybějící odpovědi/odpovědi obou rodin a chyby resolveru, CNAME/konzistence, přípravky argumentů/parsování systému, omezené skutečné podprocesy, pozorování blokovaného ICMP, skutečné místní HTTP/1.1 a TLS h2, přesměrování/limity těla/časové limity/opakované použití, zapnutá/ignorovaná komprese, schopnosti HTTP3/parsování úspěšného výsledku/odmítnutí náhrady, místní důvěra CA/nesoulad/expirace a skutečné IPv6 HTTP/HTTPS, spojení TCP/odmítnutí/simulované vypršení času, skutečné handshaky WebSocket a SSH před autentizací, zrušení/úklid/dílčí výsledky, stav offline, soukromá historie (zápis a zpětné čtení/odmítnutí importu/exporty), důvěryhodné IPC a odběry v preloadu.

npm test spouští deterministické testy bez veřejných testovacích serverů. npm run test:diagnostics:ui spouští scripts/smokeDiagnostics.js v grafickém desktopu Electron s produkčním UI/preloadem/IPC a skutečnými místními sondami HTTP/komprese. Nesouvisející služby jsou pouze v tomto testovacím prostředí nahrazeny stuby/offline. Kontroluje pořadí navigace, výsledky protokolů, perzistenci, CZ/DE/EN, oba motivy, přetečení v úzkém okně a předvolby sandboxu. Pokud shell nastavuje ELECTRON_RUN_AS_NODE, pro tento příkaz ji zrušte.

Současné ověření běhového prostředí pokrývá řízené přenosy QUIC, IPv4/IPv6, HTTPS na nestandardním portu, odpovědi 404, chyby TLS a službu pouze s TCP, která inzeruje Alt-Svc. Výsledky pro každé sestavení doprovázejí každé vydání.

Výslovná volitelná omezení: žádné nezávislé ověřování DNSSEC (vyžaduje úplný životní cyklus ověřujícího resolveru/kotvy důvěry), žádný audit Lighthouse (pouze časování serveru/sítě), žádný audit zastaralých verzí TLS ani služba revokace/CT, žádné tvrzení o opakovaném použití teplého spojení u HTTP3 a žádné měření opakovaného použití teplého spojení u HTTP/3. Nepodporované schopnosti se zobrazují, nikoli simulují.

Soubory v této změně

Vytvořeno: sedm souborů služeb v src/main/diagnostics/; src/renderer/diagnostics.js, diagnosticsI18n.js, diagnostics.css; čtyři soubory test/diagnostics*.test.js; pět souborů v test/fixtures/diagnostics/; scripts/smokeDiagnostics.js; tento dokument.

Integrováno/aktualizováno: 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, kořenové README.md, .gitignore (čtyři výjimky pro veřejné přípravky) a kořenový allowlist gitleaks úzce jmenující záměrně veřejný přípravek testovacího klíče TLS. Soukromý klíč podepisující CA byl zahozen; přípravek aplikace za běhu nikdy nepoužívá.