CH-J Server Managerquản lý máy chủ qua SSH
Menu

Server Diagnostics

Tải tệp xuống

Bản dịch này đang được rà soát về mặt ngôn ngữ. Nếu có đoạn nào chưa rõ, hãy đối chiếu với bản gốc tiếng Anh.

Được tích hợp vào thanh bên của Core theo thứ tự Plugins → Server Diagnostics → Hash & Checksum. Tính năng này không cần phiên SSH hay plugin tải xuống. Toàn bộ mã runtime, kiểm thử và dữ liệu mẫu nằm trong app/; mô-đun không phụ thuộc vào các kho mã cùng cấp. Kho mã không có doc.md, vì vậy tài liệu này và cả hai README mô tả phần triển khai.

Quy trình của người dùng

Nhập tên máy chủ, IPv4, IPv6 hoặc URL HTTP(S)/WS(S). Tên máy chủ/IP không kèm giao thức mặc định dùng HTTPS; URL rõ ràng giữ nguyên đường dẫn, truy vấn và cổng trong yêu cầu. Thông tin xác thực trong URL, giao thức không được hỗ trợ, khoảng trắng/ký tự điều khiển và tên máy chủ giống lệnh shell đều bị từ chối. Địa chỉ IPv6 dạng literal được tự động đặt trong ngoặc vuông; định danh vùng scoped/link-local không được bộ phân tích URL hỗ trợ.

Chọn Auto (ưu tiên IPv4, nếu không có thì IPv6), IPv4, IPv6 hoặc Both (Cả hai). Phân giải địa chỉ để chọn một câu trả lời cụ thể hiện tại. Phần tổng quan hiển thị mọi câu trả lời đã phân giải; các phép thăm dò kiểm tra địa chỉ đã chọn hoặc một địa chỉ cho mỗi họ được yêu cầu. Cả hai họ được đo độc lập. Chỉ sự hiện diện của AAAA không bao giờ có nghĩa là kết nối IPv6 hoạt động.

Run Diagnostics (Chạy chẩn đoán) chạy DNS, ping, traceroute, HTTP, nén, TLS và các cổng TCP đã chọn. WebSocket phải được bật rõ ràng. Mỗi công cụ cũng có nút Run/Stop (Chạy/Dừng) riêng. Mỗi lúc chỉ có thể có một lần chạy chẩn đoán đang hoạt động. Một lần chạy hoàn tất có nghĩa là các công cụ đã kết thúc, không có nghĩa là mọi phép thăm dò đều thành công. Không có kết luận chung chung kiểu “máy chủ ngoại tuyến”.

Thời gian chờ, số gói, số lần lặp, số hop tối đa, trình phân giải DNS, lựa chọn giao thức, kết nối warm và so sánh HTTP/HTTPS đều có thể cấu hình. Thay đổi đích sẽ xóa IP đã chọn trước đó. Lịch sử cho phép mở lại, so sánh hai báo cáo, xóa, nhập JSON, sao chép hoặc xuất JSON/CSV/TXT qua các hộp thoại gốc của Core. Chủ đề sáng/tối/theo hệ thống áp dụng cho phần chẩn đoán và được lưu trong cấu hình giao diện hiện có. CZ/DE/EN tuân theo ngôn ngữ ứng dụng ngay lập tức.

Thành phần và hành vi giao thức

Thành phần Triển khai và cách diễn giải
common.js Xác thực đích/tùy chọn, giới hạn và giá trị enum; chuyển đổi IDNA; thống kê số học loại trừ các giá trị không xác định.
dnsDiagnostics.js Phân giải địa chỉ hệ thống dùng dns.lookup để tuân theo cấu hình hệ điều hành và tệp hosts. Truy vấn bản ghi dùng DNS UDP có giới hạn, chuyển sang TCP khi phản hồi bị cắt ngắn, tới dns.getServers() hoặc trình phân giải tùy chỉnh/công khai được chọn rõ ràng. Không ngầm chuyển sang DNS công khai.
processTools.js Thực thi ping/traceroute của hệ điều hành bằng mảng đối số và shell: false, đầu ra có giới hạn, thời gian chờ rõ ràng và dọn dẹp abort/kill. Phân tích các phản hồi gói và hop, thay vì coi thời gian chạy tiến trình là RTT.
httpDiagnostics.js curl đi kèm cho HTTP/1.1, HTTP/2 và HTTP/3; xác minh chứng chỉ nghiêm ngặt và họ IP được ghim. Mỗi phiên bản được yêu cầu độc lập; phiên bản thực tế được ghi lại.
socketDiagnostics.js Thăm dò phiên bản TLS rõ ràng, kết nối TCP có giới hạn/banner thụ động, quan sát khóa máy chủ SSH trước xác thực bằng phụ thuộc ssh2 hiện có, và xác thực Upgrade RFC 6455 tùy chọn.
diagnosticsService.js Chạy và hủy công cụ, chọn/xác thực địa chỉ, truyền tiến độ, giữ lại các phép đo một phần và quản lý hạn chót của lần chạy.
historyStore.js Lịch sử cục bộ có phiên bản và giới hạn, che giấu dữ liệu, nhập có kiểm tra lược đồ và xuất dữ liệu đã đo.

ICMP và tuyến đường

Ping mặc định gửi bốn yêu cầu ICMP echo được thực thi riêng lẻ. Kết quả chứa RTT đo được cho từng gói, số nhận/gửi, tỷ lệ mất, tối thiểu/trung bình/tối đa, độ lệch chuẩn tổng thể, trung bình chênh lệch tuyệt đối giữa các RTT đo được liên tiếp (jitter), TTL/Hop Limit khi được in ra, và dấu thời gian. Phản hồi <1 ms được tính là đã nhận với cận trên, thay vì bịa ra một RTT dạng số. RTT không xác định bị loại khỏi thống kê độ trễ. Thống kê dùng cửa sổ lưu giữ tối đa 500 gói; số gửi/nhận/mất bao quát toàn bộ lần chạy. Biểu đồ hiển thị 200 quan sát gần nhất, với ký hiệu riêng cho phản hồi, phản hồi dưới độ phân giải, phản hồi bị thiếu và hết thời gian chờ yêu cầu/tiến trình rõ ràng.

Phản hồi bị thiếu có thể phản ánh việc lọc ICMP, mất gói hoặc hết thời gian chờ; các quan sát này không thể xác định chắc chắn có tường lửa. Thiếu tệp thực thi, lỗi quyền cục bộ và gọi công cụ không hợp lệ là các lỗi công cụ riêng, không phải mất gói hay máy chủ không khả dụng. Không yêu cầu nâng đặc quyền.

Traceroute truyền dần các hop, địa chỉ, từng phép thăm dò, giá trị trung bình và tỷ lệ phần trăm phép thăm dò không được trả lời quan sát được. DNS ngược được phân giải sau khi có tuyến đường, dùng trình phân giải đã chọn. Các lần lặp so sánh chuỗi địa chỉ hop quan sát được; khác biệt có thể phản ánh cân bằng tải. Các hop trung gian không trả lời không chứng minh tuyến đường bị hỏng. Siêu dữ liệu thăm dò thô và phương thức xuất hiện trong phần chi tiết có thể mở rộng. macOS yêu cầu thời gian chờ traceroute tính bằng số giây nguyên; thời gian chờ thực tế sau khi làm tròn được ghi lại.

DNS

Mười hai loại bản ghi là A, AAAA, CNAME, MX, NS, TXT, SOA, SRV, CAA, PTR, DS và DNSKEY. Việc phân tích định dạng wire của DNS kiểm tra danh tính giao dịch/câu hỏi, kích thước bản ghi, vòng lặp con trỏ nén và giới hạn thông điệp. Câu trả lời giữ nguyên TTL của bản ghi, thời gian truy vấn, trình phân giải và các trạng thái NXDOMAIN/NODATA/SERVFAIL/refused/timeout. Tra cứu địa chỉ của hệ điều hành không thể cung cấp TTL; truy vấn bản ghi riêng thì có thể.

Việc lần theo CNAME được giới hạn ở tám liên kết, có phát hiện vòng lặp. Kiểm tra tính nhất quán lặp lại các câu trả lời A/AAAA từ trình phân giải đã chọn và thực hiện PTR xác nhận chiều thuận cho các kiểm tra DNS với IP literal. Câu trả lời thay đổi là quan sát, không phải bằng chứng lỗi DNS. Truy vấn SRV dùng tên đích đúng như đã nhập; hãy nhập tên dịch vụ như _service._tcp.example.org khi cần. DNSSEC luôn không được xác thực. Sự hiện diện của DS/DNSKEY và thậm chí cờ AD của trình phân giải không bao giờ được coi là xác thực độc lập.

HTTP, hiệu năng và nén

HTTP/1.1 chỉ được chấp nhận là được hỗ trợ khi phiên bản đó thực sự được trả về. HTTP/2 qua HTTPS yêu cầu h2 đã được thương lượng; không có trường hợp dự phòng nào bị gắn nhãn lại. HTTP/2 không mã hóa dùng prior knowledge, không phải phép thăm dò Upgrade của HTTP/1.1. Việc xác minh TLS vẫn nghiêm ngặt cho mọi yêu cầu HTTP/WebSocket.

Chuyển hướng thủ công được giới hạn ở tám lần; vòng lặp, đích không hợp lệ và chuyển hướng quá mức đều thất bại rõ ràng. Toàn bộ chuỗi ghi lại các thay đổi giữa các tên miền và việc hạ cấp từ HTTPS; thay đổi giao thức và www hiển thị trong URL nguồn/đích. Thông tin xác thực và giao thức chuyển hướng không phải HTTP(S) bị từ chối. Mỗi chuyển hướng sang máy chủ khác được phân giải độc lập qua trình phân giải và họ IP đã chọn.

Các phép đo bao gồm DNS (khi được thực hiện), TCP, TLS, TTFB của phản hồi cuối cùng, TTFB tổng thể bao gồm DNS/chuyển hướng, tải xuống, chuyển hướng và tổng thời gian thực, số byte thực thể thực tế, tốc độ truyền, trạng thái, header phản hồi, địa chỉ/cổng thực tế của máy chủ, ALPN và việc tái sử dụng kết nối đã được xác minh. Các giai đoạn DNS/TCP/TLS không được thực hiện trên kết nối được ghim hoặc tái sử dụng có giá trị N/A, không phải số 0 giả. QUIC không có giai đoạn TCP; quá trình bắt tay của nó được ghi lại riêng. Chi phí truyền header hay toàn bộ chi phí wire không được khẳng định là phép đo byte thực thể. Đây là thời gian của máy chủ/mạng, không phải thời gian hiển thị trang hay điểm Lighthouse.

Mỗi giao thức được chọn dùng cùng đích và số lần lặp. IPv4/IPv6 và HTTP/HTTPS là các tùy chọn so sánh rõ ràng. Giao thức thay thế dùng cổng mặc định của nó. Mỗi giao thức khởi tạo một tiến trình trình khách đi kèm độc lập cho mỗi mẫu. Việc tái sử dụng kết nối không được khẳng định. Thống kê tổng thời gian bao gồm tối thiểu/trung bình/trung vị/tối đa/P95 theo hạng gần nhất và tỷ lệ lỗi truyền tải/giao thức riêng; mã trạng thái HTTP vẫn hiển thị ngay cả khi máy chủ trả về thành công một phản hồi 4xx/5xx.

Kiểm tra nén gửi identity, gzip, deflate, br và (khi runtime hỗ trợ) zstd dưới dạng các yêu cầu Accept-Encoding riêng biệt. Content-Encoding phải khớp và việc giải nén có giới hạn phải thành công. Tỷ lệ chỉ được tính nếu hash của nội dung đã giải mã, URL cuối cùng và trạng thái khớp với mốc identity. Các encoding bị bỏ qua được coi là không được hỗ trợ; nội dung thay đổi/động không có tỷ lệ. Đây là quan sát cho URL/trạng thái đó, không phải khả năng hỗ trợ chung của máy chủ.

Kiểm tra header bảo mật hiển thị sự hiện diện và giá trị của HSTS, CSP, X-Content-Type-Options, Referrer-Policy, Permissions-Policy và X-Frame-Options. Chỉ thị CSP frame-ancestors có thể thay thế header cuối cùng. Sự hiện diện không chứng minh rằng chính sách được cấu hình đúng hay trang web an toàn.

Yêu cầu và bằng chứng HTTP/3

HTTP/1.1, HTTP/2 và HTTP/3 dùng cùng một trình khách curl đi kèm. macOS arm64 và Linux x64 dùng curl 8.22.0, OpenSSL 3.5.9, nghttp2 1.70.0, ngtcp2 1.25.0 và nghttp3 1.18.0. Windows x64 dùng bản dựng tĩnh chính thức curl-for-win 8.22.0_3 của curl.se với LibreSSL 4.3.3 và cùng các thư viện HTTP. Không cần dự phòng sang curl của hệ thống, tải xuống trong lúc chạy hay quyền quản trị viên. Công thức dựng upstream có thể tái lập cho Windows là https://github.com/curl/curl-for-win/tree/9d77e31e .

Dựng bằng python3 scripts/native/build.py (Windows: python scripts/native/build.py) trước khi đóng gói. macOS/Linux cần công cụ C/C++, CMake, Ninja, Perl, make và pkg-config. Mã nguồn được ghim theo phiên bản và SHA-256 upstream trong scripts/native/dependencies.lock.json. Script xác minh mọi tệp tải xuống, liên kết tĩnh các thư viện truyền tải của bên thứ ba và thất bại nếu thiếu tính năng HTTP2/HTTP3/SSL. Chỉ các thư viện của hệ điều hành là vẫn liên kết động. Windows dùng tệp nén nhị phân chính thức đã ghim, không phải ngăn xếp truyền tải Windows được biên dịch cục bộ. Tệp CA đi kèm có hash được ghim riêng; giấy phép thành phần và nguồn gốc bản dựng upstream đi kèm runtime.

Trình khách và kho tin cậy được cài đặt bên ngoài app.asar tại resources/native-runtime/<platform>-<arch>/. Mỗi lần chẩn đoán đều xác minh hash thành phần, kiến trúc và khả năng của tệp thực thi trước khi sử dụng. Tệp cấu hình, proxy, biến môi trường ghi đè độ tin cậy TLS và biến chèn thư viện đều bị loại trừ. curl chạy với đường dẫn tuyệt đối, shell bị tắt, độ tin cậy CA đã xác minh, họ IP được xác định rõ ràng, không cookie, không tự động chuyển hướng, cùng đầu ra và thời gian có giới hạn. Các chuyển hướng được ứng dụng xác thực và phân giải lại. Hỗ trợ HTTPS trên các cổng khác 443.

HTTP/3 dùng --http3-only và chỉ được xác nhận sau khi một lần truyền hoàn tất báo cáo HTTP phiên bản 3 và xác minh chứng chỉ thành công. Phản hồi lỗi HTTP như 404 cũng có thể xác nhận giao thức. Alt-Svc là thông báo, không phải bằng chứng. Hết thời gian chờ QUIC, lỗi chứng chỉ, lỗi DNS, kết nối bị từ chối, giao thức không tương thích và lỗi thành phần vẫn được phân biệt. Hết thời gian chờ UDP khiến khả năng hỗ trợ của máy chủ vẫn chưa được xác minh. Thời gian bắt tay QUIC không được báo cáo như thời gian TCP.

Mỗi phép đo khởi tạo một tiến trình/kết nối riêng. Tùy chọn warm không khẳng định việc tái sử dụng kết nối đối với trình khách đi kèm. Điều này giữ cho việc so sánh giao thức nhất quán. Báo cáo bao gồm phiên bản runtime, khả năng, xác minh TLS và thời gian QUIC, còn lịch sử/bản xuất loại bỏ nội dung, truy vấn URL và header xác thực.

Hãy cập nhật các giá trị ghim này và dựng lại cho mọi nền tảng được hỗ trợ khi cập nhật ngăn xếp truyền tải hoặc kho tin cậy CA. Các tệp đã phát hành và ảnh chụp mã nguồn là bất biến.

IPC của Core

Preload chỉ cung cấp window.chjCore.diagnostics; mọi trình xử lý giữ nguyên bước kiểm tra người gửi là cửa sổ chính hiện có và các tác vụ mạng vẫn ở tiến trình chính. Kết quả dùng { ok: true, value } hoặc { ok: false, error: { code, message } }.

Kênh / phương thức preload Payload / kết quả
diagnostics:resolve / resolve(options) Đích/cài đặt đã xác thực → đích và các địa chỉ đã phân giải. Tối đa hai yêu cầu phân giải đồng thời.
diagnostics:start / start(options) Đích/cài đặt/lựa chọn công cụ đã xác thực → ID tác vụ không minh bạch và báo cáo ban đầu.
diagnostics:cancel / cancel(id, tool?) Hủy một công cụ đang chạy/đang chờ hoặc toàn bộ lần chạy.
diagnostics:get / get(id) Ảnh chụp của một lần chạy đã biết hoặc báo cáo đã lưu.
diagnostics:history / history() Tóm tắt lịch sử cục bộ.
diagnostics:removeHistory / removeHistory(id) Xóa mục lịch sử đã chọn.
diagnostics:copy / copy(id, format) Tiến trình chính ghi một báo cáo đã biết, đã che giấu dữ liệu vào bộ nhớ tạm.
diagnostics:export / export(id, format) JSON/CSV/TXT qua hộp thoại lưu gốc; renderer không thể cung cấp đường dẫn hệ thống tệp.
diagnostics:import / import() Bộ chọn tệp gốc, xác thực kích thước/lược đồ/độ sâu và che giấu dữ liệu trước khi lưu.
diagnostics:progress / onProgress(callback) Địa chỉ đã phân giải, công cụ bắt đầu/hoàn tất, gói, hop, mẫu HTTP và hoàn tất; trả về callback hủy đăng ký.

Không có API shell, hệ thống tệp hay mạng tổng quát nào được cung cấp. Cô lập ngữ cảnh, sandbox, tích hợp Node bị tắt và CSP renderer hiện có vẫn được bật. Các hợp đồng plugin hiện có và việc xác minh/ngoại lệ của trình cập nhật không thay đổi.

Ngân sách và dữ liệu cục bộ

Yêu cầu nền tảng và xác minh

Nền tảng ICMP Tuyến đường Giao thức khác
Windows 10/11 ping.exe -4/-6 tracert.exe -4/-6, ICMP curl.exe đi kèm với HTTP/2 và HTTP/3. Các trường RTT đã bản địa hóa không phụ thuộc vào từ “time”.
macOS /sbin/ping, /sbin/ping6 /usr/sbin/traceroute, /usr/sbin/traceroute6, UDP; thời gian chờ tính bằng số giây nguyên curl đi kèm với HTTP/2 và HTTP/3.
Ubuntu/Linux iputils ping -4/-6 traceroute -4/-6 tiêu chuẩn, UDP curl đi kèm với HTTP/2 và HTTP/3; việc thiếu công cụ ICMP/tuyến đường được báo cáo riêng.

Không thêm phụ thuộc npm mới nào. Phần triển khai dùng các mô-đun tích hợp của Node và ssh2 hiện có của ứng dụng. Nó không cài đặt công cụ hệ thống và không yêu cầu quyền quản trị. Tường lửa và các hạn chế UDP có thể khiến một kiểm tra không chứng minh được khả năng hỗ trợ; không thể suy ra chúng chỉ từ việc hết thời gian chờ.

Phạm vi kiểm thử tự động nằm trong diagnosticsCore.test.js, diagnosticsNetwork.test.js, diagnosticsHttp.test.js và diagnosticsIpc.test.js: xác thực/IPv6 literal, dữ liệu mẫu DNS UDP+TCP gốc/cục bộ, câu trả lời bị thiếu/hai họ và lỗi trình phân giải, CNAME/tính nhất quán, dữ liệu mẫu về đối số/phân tích của hệ điều hành, tiến trình con thực tế có giới hạn, quan sát ICMP bị chặn, HTTP/1.1 và TLS h2 cục bộ thực tế, chuyển hướng/giới hạn nội dung/thời gian chờ/tái sử dụng, nén được bật/bị bỏ qua, khả năng HTTP3/phân tích kết quả thành công/từ chối dự phòng, độ tin cậy CA cục bộ/không khớp/hết hạn và HTTP/HTTPS IPv6 thực tế, kết nối TCP/bị từ chối/hết thời gian chờ giả lập, bắt tay WebSocket và SSH trước xác thực thực tế, hủy/dọn dẹp/kết quả một phần, trạng thái ngoại tuyến, lưu và đọc lại lịch sử riêng tư/từ chối nhập/xuất, IPC đáng tin cậy và đăng ký preload.

npm test chạy các kiểm thử xác định mà không cần máy chủ thử nghiệm công khai. npm run test:diagnostics:ui chạy scripts/smokeDiagnostics.js trong môi trường máy tính Electron có giao diện đồ họa, dùng giao diện/preload/IPC sản xuất và các phép thăm dò HTTP/nén cục bộ thực tế. Các dịch vụ không liên quan chỉ được giả lập/để ngoại tuyến trong bộ kiểm thử này. Nó kiểm tra thứ tự điều hướng, kết quả giao thức, khả năng lưu trữ, CZ/DE/EN, cả hai chủ đề, tràn nội dung trong cửa sổ hẹp và tùy chọn sandbox. Nếu shell đặt ELECTRON_RUN_AS_NODE, hãy bỏ đặt biến này cho lệnh trên.

Việc xác minh runtime hiện tại bao gồm các lần truyền QUIC có kiểm soát, IPv4/IPv6, HTTPS trên cổng không mặc định, phản hồi 404, lỗi TLS và một dịch vụ chỉ dùng TCP nhưng quảng bá Alt-Svc. Kết quả cho từng bản dựng đi kèm mỗi bản phát hành.

Các giới hạn tùy chọn rõ ràng: không xác thực DNSSEC độc lập (cần một trình phân giải xác thực hoàn chỉnh/vòng đời trust anchor), không kiểm tra Lighthouse (chỉ thời gian máy chủ/mạng), không kiểm tra TLS lỗi thời hay dịch vụ thu hồi/CT, không khẳng định tái sử dụng warm cho HTTP3, và không đo tái sử dụng warm cho HTTP/3. Các khả năng không được hỗ trợ được hiển thị thay vì mô phỏng.

Các tệp trong thay đổi này

Đã tạo: bảy tệp dịch vụ trong src/main/diagnostics/; src/renderer/diagnostics.js, diagnosticsI18n.js, diagnostics.css; bốn tệp test/diagnostics*.test.js; năm tệp trong test/fixtures/diagnostics/; scripts/smokeDiagnostics.js; tài liệu này.

Đã tích hợp/cập nhật: 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, README.md gốc, .gitignore (bốn ngoại lệ cho dữ liệu mẫu công khai), và danh sách cho phép gitleaks gốc chỉ nêu đích danh dữ liệu mẫu khóa thử nghiệm TLS được cố ý công khai. Khóa riêng tư của CA ký đã bị hủy; dữ liệu mẫu không bao giờ được runtime của ứng dụng sử dụng.