> Este texto traducido está en revisión lingüística. Si un pasaje no está claro, consulte el [original en inglés](https://www.sm.ch-j.eu/docs/i18n/en/server-diagnostics.md). # Diagnóstico del servidor Integrado en la barra lateral Core, en el orden Plugins → Diagnósticos de servidor → Hash & Checksum. No requiere ninguna sesión de SSH ni un complemento descargado. Todos los códigos de tiempo de ejecución, pruebas y accesorios viven en `app/`; el módulo no tiene dependencia de repositorios de hermanos. El repositorio no tiene `doc.md`, por lo que este documento y ambos READMEs describen la implementación. ## Flujo de trabajo del usuario Introduzca un nombre de host, URL IPv4, IPv6 o HTTP(S)/WS(S). Nombres de host/IP por defecto a HTTPS; las URL explícitas conservan su ruta, consulta y puerto durante la solicitud. Se rechazan credenciales en URLs, esquemas no soportados, caracteres de espacio en blanco/control y nombres de host similares a shell. Los literales de IPv6 se entre corchetes automáticamente; los identificadores de zona scoped/link-local no son compatibles con el analizador de URL. Elija automáticamente (prefiere IPv4, de lo contrario IPv6), IPv4 o IPv6. Resolver direcciones para elegir una respuesta actual en particular. El resumen muestra todas las respuestas resueltas; las sondas prueban la dirección seleccionada o una dirección por familia solicitada. Ambas familias se miden independientemente. La presencia de AAAA por sí sola nunca implica que funcione la conectividad IPv6. Ejecutar Diagnósticos ejecuta DNS, ping, traceroute, HTTP, compresión, TLS y los puertos TCP seleccionados. WebSocket está de acuerdo. Cada herramienta también tiene un control de ejecución/parada separado. Una prueba de diagnóstico puede estar activa a la vez. Una ejecución completa significa que las herramientas han terminado, no que cada sonda haya tenido éxito. No hay un veredicto general de “servidor fuera de línea”. Tiempo de espera, recuento de paquetes, repeticiones, salto máximo, resueltor DNS, selección de protocolo, conexión caliente y comparación HTTP/HTTPS son configurables. Cambiar el objetivo borra una IP previamente seleccionada. El historial puede reabrir, comparar dos informes, eliminar, importar JSON, copiar o exportar JSON/CSV/TXT a través de los diálogos nativos del núcleo. El tema Light/dark/system se aplica a la sección de diagnóstico y se guarda en la configuración de interfaz de usuario existente. CZ/DE/EN sigue el lenguaje de la aplicación inmediatamente. ## Componentes y comportamiento del protocolo | Componente | Aplicación e interpretación | | --- | --- | | `common.js` El | valida objetivos/opciones, límites y valores de enum; conversión del IDNA; las estadísticas numéricas excluyen los valores desconocidos. | | `dnsDiagnostics.js` | Usos de resolución de direcciones del sistema `dns.lookup` para honrar la configuración del sistema operativo y los archivos hosts. Las consultas de registro utilizan UDP DNS con retroceso TCP para respuestas truncadas contra `dns.getServers()`, o el solucionador personalizado/público expresamente elegido. No hay cambio implícito a DNS público. | | `processTools.js` La | ejecuta el ping/traceroute del sistema operativo con un array de argumentos y `shell: false`, salida limitada, tiempo de espera explícito y cancelación/desactivación. Analizar las respuestas de paquetes y saltos, en lugar de tratar la duración del proceso como RTT. | | `httpDiagnostics.js` | Rizo agrupado para HTTP/1.1, HTTP/2 y HTTP/3; verificación estricta de certificados y familia IP fija. Cada versión se solicita de forma independiente; la versión real se graba. | | `socketDiagnostics.js` | Explícita TLS sondas de versiones, conexiones TCP acotadas/banners pasivos, pre-autenticación SSH observación de la clave del host utilizando la dependencia ssh2 existente, y RFC opcional 6455 Validación de actualización. | | `diagnosticsService.js` | Ejecuta y cancela herramientas, selecciona/valida direcciones, transmite el progreso, conserva mediciones parciales y posee el plazo de ejecución. | | `historyStore.js` La versión de | tiene un historial local limitado, una redacción, importaciones verificadas por esquemas y exportaciones de datos medidos. | ### ICMP y rutas Ping por defecto a cuatro solicitudes de eco ICMP ejecutadas individualmente. Los resultados contienen RTT medido por paquete, recuentos recibidos/enviados, pérdida, min/average/max, desviación estándar de población, diferencia absoluta media entre los RTT medidos consecutivos (temblor), límite TTL/Hop cuando se imprimen y marcas de tiempo. Una respuesta `<1 ms` se cuenta como recibida con un límite superior, en lugar de inventar un RTT numérico. Los TRT desconocidos están excluidos de las estadísticas de latencia. Las estadísticas usan la ventana retenida de al máximo paquetes 500; los conteos sent/received/loss cubren toda la ejecución. Los gráficos muestran las últimas observaciones de 200, con símbolos distintos para respuestas, respuestas de subresolución, respuestas faltantes y tiempos de solicitud/proceso explícitos. Una respuesta que falta puede reflejar el filtrado ICMP, pérdida de paquetes o tiempo muerto; estas observaciones no pueden identificar un cortafuegos concluyentemente. Faltan ejecutables, fallos de permisos locales e invocaciones de herramientas inválidas son errores de herramienta separados, no pérdida de paquetes o falta de disponibilidad del servidor. No se solicita ninguna escalada de privilegios. Traceroute fluye lúpulo, direcciones, sondas individuales, medios y porcentajes de sonda sin respuesta observados. DNS inversa se resuelve después de la ruta, utilizando el solucionador seleccionado. Las repeticiones comparan las secuencias de direcciones de lúpulo observadas; las diferencias pueden reflejar el equilibrio de carga. El lúpulo intermedio sin respuesta no establece una ruta rota. Los metadatos y el método de la sonda en bruto aparecen en detalles ampliables. macOS requiere esperas de trazado entero-segundo; el tiempo de espera redondeado efectivo se registra. ### DNS Los doce tipos de discos son A, AAAA, CNAME, MX, NS, TXT, SOA, SRV, CAA, PTR, DS y DNSKEY. El análisis de alambre DNS comprueba la identidad de transacción/pregunta, el tamaño de los registros, los bucles de puntero de compresión y los límites de mensajes. Las respuestas preservan registros TTL, tiempo de consulta, solucionador y estados NXDOMAIN/NODATA/SERVFAIL/refused/timeout. Las búsquedas de direcciones del sistema operativo no pueden suministrar TTL; la consulta de registros separada puede. El siguiente CNAME está limitado a ocho enlaces con la detección del ciclo. La coherencia repite las respuestas de A/AAAA del solucionador seleccionado, y realiza PTR confirmado por adelantado para pruebas DNS IP-literal. Las respuestas cambiadas son observaciones, no prueba de un fallo DNS. Las consultas para SRV utilizan el nombre de destino como se indica; introduzca un nombre de servicio como `_service._tcp.example.org` cuando sea necesario. DNSSEC siempre es **not validado**. La presencia DS/DNSKEY e incluso la bandera AD de un solucionador nunca se trata como validación independiente. ### HTTP, rendimiento y compresión HTTP/1.1 acepta esa versión como compatible sólo cuando realmente fue devuelta. HTTPS HTTP/2 requiere negociación h2; no se reetiqueta ningún retroceso. Cleartext HTTP/2 utiliza conocimientos previos, no una sonda de actualización HTTP/1.1. La verificación TLS sigue siendo estricta para cada solicitud HTTP/WebSocket. Las redirecciones manuales se limitan a ocho; los bucles, destinos inválidos y redireccionamientos excesivos fallan explícitamente. La cadena completa registra cambios en el dominio cruzado y rebajas HTTPS; los esquemas y los cambios de www son visibles en las URL de origen/destino. Las credenciales y los esquemas de redireccionamiento no-HTTP(S) son rechazados. Cada redireccionamiento entre hosts se resuelve de forma independiente a través del solucionador seleccionado y la familia IP solicitada. Las mediciones incluyen DNS (cuando se realiza), TCP, TLS, TTFB de respuesta final, TTFb general incluyendo DNS/redirects, descargar, redirigir y tiempo total de pared, bytes reales de la entidad, velocidad de transferencia, estado, encabezados de respuesta, dirección/puerto real del servidor, ALPN y reutilización verificada de la conexión. Las fases DNS/TCP/TLS no realizadas en una conexión fija o reutilizada son `N/A`, no ceros falsos. QUIC no tiene fase TCP; su apretón de manos se registra por separado. La transferencia de encabezados o los gastos generales completos de alambre no se afirman como medición de la entidad-byte. Estos son tiempos de servidor/red, no renderización de páginas o puntajes de Lighthouse. Cada protocolo seleccionado utiliza el mismo objetivo y repeticiones. IPv4/IPv6 y HTTP/HTTPS son opciones de comparación explícitas. El esquema alternativo utiliza su puerto por defecto. Cada protocolo inicia un proceso independiente combinado-cliente por muestra. No se afirma la reutilización de la conexión. Las estadísticas de tiempo total incluyen min/average/median/max/nearest-rank P95 y una tasa de error de transporte/protocolo separada; los códigos de estado HTTP permanecen visibles incluso cuando un servidor devuelve con éxito una respuesta 4xx/5xx. La compresión envía identidad, gzip, deflatar, br y (cuando el tiempo de ejecución lo soporta) zstd como peticiones de Codificación-Aceptar separadas. La codificación de contenido debe coincidir, y la descompresión limitada debe tener éxito. Una relación se calcula sólo si el hash del cuerpo decodificado, URL final y estado coinciden con la línea de base de identidad. Las codificaciones ignoradas no son soportadas; los cuerpos cambiantes/dinámicos no tienen relación. Esta es una observación para esa URL/estatus, no el soporte universal del servidor. Las comprobaciones de seguridad muestran la presencia y el valor de HSTS, CSP, X-Content-Type-Options, Referrer-Policy, Permisos-Política y X-Frame-Opciones. Una directiva de CSP para los antecesores de marcos puede sustituir a esta última. La presencia no establece que la política esté correctamente configurada o que el sitio web sea seguro. ### Requisitos y pruebas de HTTP/3 HTTP/1.1, HTTP/2 y HTTP/3 utilizan el mismo cliente curl incluido. macOS arm64 y Linux El uso de x64 riel 8.22.0, OpenSSL 3.5.9 nghttp2 1.70.0; ngtcp2 1.25.0 and nghttp3 1.18.0. Windows x64 utiliza la compilación estática oficial curl.se curl-for-win 8.22.0_3 con LibreSSL 4.3.3 y las mismas bibliotecas HTTP. No se necesita ningún sistema de recuperación, descarga en tiempo de ejecución o permiso de administrador. La receta de construcción reproducible Windows aguas arriba es https://github.com/curl/curl-for-win/tree/9d77e31e . Construir con `python3 scripts/native/build.py` (Windows: `python scripts/native/build.py`) antes de empaquetar. macOS/Linux requiere herramientas C/C++, CMake, Ninja, Perl, make y pkg-config. Las fuentes se basan en la versión y aguas arriba SHA-256 en `scripts/native/dependencies.lock.json`. El script verifica cada descarga, enlaza estáticamente bibliotecas de transporte de terceros y falla sin las características HTTP2/HTTP3/SSL. Sólo las bibliotecas del sistema operativo permanecen dinámicas. Windows utiliza el archivo binario oficial fijado, no una pila de transporte Windows compilada localmente. El archivo CA agrupado tiene su propio hash fijo; las licencias de componentes y la procedencia de construcción ascendente acompañan el tiempo de ejecución. El cliente y la tienda de confianza están instalados fuera app.asar en `resources/native-runtime/-/`. Cada diagnóstico verifica los hashes de componentes, la arquitectura y las capacidades ejecutables antes de su uso. Se excluyen los archivos de configuración, proxys, el entorno de confianza TLS y las variables de inyección de la biblioteca. curl se ejecuta con una ruta absoluta, shell desactivado, confianza CA verificada, una familia de IP explícita resuelta, sin cookies, sin redirecciones automáticas, y salida limitada y tiempo. Los redireccionamientos son validados y re-resueltos por la aplicación. HTTPS en puertos distintos de 443 es compatible. HTTP/3 utiliza `--http3-only` y se confirma sólo después de una transferencia completa que informa la versión HTTP 3, así como la verificación exitosa del certificado. Las respuestas de error HTTP como 404 pueden confirmar el protocolo. Alt-Svc es un anuncio, no una prueba. Tiempo de espera QUIC, fallo del certificado, fallo de DNS, denegación de conexión, protocolo incompatible y fallo del componente siguen siendo distintos. Un tiempo de espera UDP deja el soporte del servidor sin verificar. El tiempo de apretón de manos QUIC no se reporta como tiempo de TCP. Cada medición inicia un proceso/conexión separado. La opción caliente no reclama la reutilización de la conexión para el cliente incluido. Esto mantiene las comparaciones del protocolo consistentes. Los informes incluyen versiones de tiempo de ejecución, capacidades, verificación TLS y sincronización QUIC, mientras que el historial/exportación elimina los cuerpos, consultas de URL y cabeceras de autenticación. Actualiza estos pines y reconstruye cada plataforma compatible al actualizar la pila de transporte o la tienda de confianza CA. Los artefactos publicados y las instantáneas de origen son inmutables. ## CIP básico La precarga solo expone `window.chjCore.diagnostics`; todos los manipuladores retienen la verificación de la ventana principal y el trabajo en red se mantiene en la parte principal. Los resultados usan `{ ok: true, value }` o `{ ok: false, error: { code, message } }`. | Canal / método de precarga | Carga útil / resultado | | --- | --- | | `diagnostics:resolve` / `resolve(options)`Z | Validado destino/ajustes → destino y direcciones resueltas. A lo sumo dos solicitudes de resolución concurrentes. | | `diagnostics:start` / `start(options)` | Objetivo validado/settings/tool selección → trabajo opaco ID e informe inicial. | | `diagnostics:cancel` / `cancel(id, tool?)` | Cancelar una herramienta activa/quemada o toda la ejecución. | | `diagnostics:get` / `get(id)` | Captura de pantalla de una ejecución conocida o un informe guardado. | | `diagnostics:history` / `history()` | Resúmenes de historia local. | | `diagnostics:removeHistory` / `removeHistory(id)` | Eliminar el elemento histórico seleccionado. | | `diagnostics:copy` / `copy(id, format)` El | Main escribe un informe conocido redactado en el portapapeles. | | `diagnostics:export` / `export(id, format)` | JSON/CSV/TXT a través del diálogo de guardado nativo; el renderizador no puede suministrar una ruta del sistema de archivos. | | `diagnostics:import` / `import()` Selector de archivos nativo |, tamaño/schema/depth validación y redacción antes de almacenar. | | `diagnostics:progress` / `onProgress(callback)` | Direcciones resueltas, inicios/compleciones de herramientas, paquetes, saltos, muestras HTTP y finalización; devuelve una devolución de cancelación. | No se expone ningún shell genérico, sistema de archivos o red API. El aislamiento del contexto, el sandbox, la integración de nodo desactivado y el renderizador CSP están habilitados. Los contratos de plugin existentes y la verificación/excepciones del actualizador no han cambiado. ## Presupuestos y datos locales - Una ejecución, dos herramientas activas, como máximo dos sondas de familia IP por herramienta; TCP además limita cada dirección a cuatro conexiones. - Tiempo de funcionamiento 250–30000 ms; paquetes 1–100, repeticiones 1–20; saltos 1–40 y puertos 1–16. Las corridas regulares se detienen a los cinco minutos; el ping continuo a los treinta minutos. El subproceso de traceroute tiene una tapa 180-segundo adicional. - Salida de proceso normalmente 256 KiB; cuerpo de entidad HTTP 2 MiB; cuerpo en descompresión 8 MIB; encabezados HTTP limitados; ningún organismo de respuesta ingresa al historial. - Retenga como máximo los paquetes/progresos de 500, cinco ejecuciones en memoria, treinta informes históricos y 10 MiB de historia. La historia utiliza el escritor atómico privado existente en `/diagnostics/history.json` (modo 0600). - Las importaciones son como máximo 2 MiB, esquema 1, con nidificación limitada y colecciones de resultados validados. Las células CSV se escapan y los prefijos de fórmula neutralizados. Las consultas/fragmentos de URL, credenciales, cookies, encabezados de autenticación y cuerpos sin procesar están excluidos de los informes almacenados de /copied/exported. Los detalles en bruto muestran datos estructurados medidos, no una captura de paquetes o un cuerpo de respuesta retenido. - Sin sincronización en la nube, inicio de sesión automático, cambios en la configuración del servidor o exploración agresiva/sin límites. El usuario elige explícitamente target/ports/resolver. ## Requisitos de la plataforma y verificación | Plataforma | ICMP | Ruta | Otros protocolos | | --- | --- | --- | --- | | Windows 10/11 | `ping.exe -4/-6` | `tracert.exe -4/-6`, ICMP | Bundled curl.exe con HTTP/2 y HTTP/3. Los campos RTT localizados no dependen de la palabra “tiempo”. | | macOS | `/sbin/ping`, `/sbin/ping6` | `/usr/sbin/traceroute`, `/usr/sbin/traceroute6`, UDP; esperas de segundos enteros | Rizos abarrotados con HTTP/2 y HTTP/3. | | Ubuntu/Linux | iputils `ping -4/-6` | estándar `traceroute -4/-6`, UDP | Rizos abarrotados con HTTP/2 y HTTP/3; las herramientas ICMP/route que faltan se informan por separado. | No se añadió ninguna nueva dependencia de NPM. La implementación utiliza Nodo integrado y la aplicación existente ssh2. No instala herramientas del sistema ni solicita derechos administrativos. Los cortafuegos y las restricciones UDP pueden impedir que una prueba establezca soporte; no se pueden inferir de un tiempo fuera solo. La cobertura automatizada está en `diagnosticsCore.test.js`, `diagnosticsNetwork.test.js`, `diagnosticsHttp.test.js` y `diagnosticsIpc.test.js`: validación/IPv6 literales, nativos/locales DNS UDP+TCP fixtures, falta de respuestas / familia dual y errores de resolución, CNAME/coherencia, OS argumento / ajustes de análisis, procesos hijos reales limitados, observaciones ICMP bloqueadas, local real HTTP/1.1 y TLS h2, redirige/límites del cuerpo/timeouts/reuse, compresión activada/ignorada, HTTP3 capacidades/análisis de resultados/rechazo de retroceso, confianza local en CA/mismatch/expiration real IPv6 HTTP/HTTPS, conexión TCP/refused/mock Tiempo muerto, WebSocket real y SSH apretones de manos pre-autenticación, cancelación/cleanup/partial resultados, estado offline, historia privada ida y vuelta/rechazo de importación/exportaciones, IPC de confianza y suscripciones precargadas. `npm test` ejecuta pruebas deterministas sin servidores públicos de prueba. `npm run test:diagnostics:ui` ejecuta `scripts/smokeDiagnostics.js` en un escritorio gráfico Electron, utilizando la producción de UI/preload/IPC y sondas HTTP/compresión locales reales. Los servicios no relacionados se reclinan/desactivan sólo en este arnés de prueba. Comproba el orden de navegación, los resultados del protocolo, la persistencia, CZ/DE/EN, ambos temas, el desbordamiento de ventanas estrechas y las preferencias de caja de arena. Si la shell establece ELECTRON_RUN_AS_NODE, desactive este comando. La verificación actual del tiempo de ejecución abarca las transferencias QUIC controladas, IPv4/IPv6, HTTPS en un puerto no predeterminado, respuestas 404 y fallos de TLS. Los resultados de Per-build acompañan cada lanzamiento. Límites opcionales explícitos: ninguna validación DNSSEC independiente (requiere un ciclo de vida completo validador/anclador de confianza), ninguna auditoría de Faro (servidor/intervalo de red solamente), ninguna auditoría TLS obsoleta o servicio de revocación/CT, ninguna reclamación de reutilización en caliente HTTP3 y ninguna medición de la reutilización en caliente de HTTP/3. Las capacidades no soportadas se muestran en lugar de simularse. ## Archivos en este cambio Creado: los siete archivos de servicio en `src/main/diagnostics/`; `src/renderer/diagnostics.js`, `diagnosticsI18n.js` y `diagnostics.css`. Los cuatro archivos `test/diagnostics*.test.js`: cinco archivos bajo `test/fixtures/diagnostics/` ; `scripts/smokeDiagnostics.js` este documento. Integrado/actualizado: `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`, raíz `README.md`, `.gitignore` (cuatro excepciones de montaje público), y las raíces de gitleaks permiten nombrar estrictamente el público deliberadamente TLS Un dispositivo de llave de prueba. La clave privada CA de firma fue descartada; el accesorio nunca es utilizado por el tiempo de ejecución de la aplicación.