# Server Diagnostics (การวินิจฉัยเซิร์ฟเวอร์) ผสานรวมอยู่ในแถบด้านข้างของ Core ตามลำดับ Plugins → Server Diagnostics → Hash & Checksum ไม่ต้องใช้เซสชัน SSH หรือปลั๊กอินที่ดาวน์โหลด โค้ดรันไทม์ การทดสอบ และข้อมูลทดสอบทั้งหมดอยู่ใน `app/` โมดูลนี้ไม่ขึ้นกับคลังโค้ดที่อยู่ระดับเดียวกัน คลังโค้ดไม่มี `doc.md` ดังนั้นเอกสารนี้และ README ทั้งสองฉบับจึงอธิบายการนำไปใช้งาน ## เวิร์กโฟลว์ของผู้ใช้ ป้อนชื่อโฮสต์ IPv4, IPv6 หรือ URL แบบ HTTP(S)/WS(S) ชื่อโฮสต์/IP ที่ไม่มีสคีมจะใช้ HTTPS เป็นค่าเริ่มต้น URL ที่ระบุอย่างชัดแจ้งจะคงพาธ คิวรี และพอร์ตไว้ในระหว่างคำขอ ข้อมูลรับรองใน URL สคีมที่ไม่รองรับ ช่องว่าง/อักขระควบคุม และชื่อโฮสต์ที่ดูเหมือนคำสั่งเชลล์จะถูกปฏิเสธ IPv6 แบบ literal จะถูกใส่วงเล็บเหลี่ยมโดยอัตโนมัติ ตัวระบุโซนแบบ scoped/link-local ไม่ได้รับการรองรับโดยตัวแยกวิเคราะห์ URL เลือก Auto (ใช้ IPv4 ก่อน หากไม่มีจึงใช้ IPv6), IPv4, IPv6 หรือ Both (ทั้งสอง) แปลงชื่อที่อยู่เพื่อเลือกคำตอบปัจจุบันที่ต้องการ ภาพรวมจะแสดงคำตอบที่แปลงชื่อแล้วทั้งหมด การตรวจวัดจะทดสอบที่อยู่ที่เลือก หรือหนึ่งที่อยู่ต่อตระกูลที่ร้องขอ ทั้งสองตระกูลวัดแยกกันอย่างอิสระ การมีระเบียน AAAA เพียงอย่างเดียวไม่ได้หมายความว่าการเชื่อมต่อ IPv6 ใช้งานได้ Run Diagnostics (เรียกใช้การวินิจฉัย) จะเรียกใช้ DNS, ping, traceroute, HTTP การบีบอัด TLS และพอร์ต TCP ที่เลือก WebSocket ต้องเปิดใช้อย่างชัดแจ้ง แต่ละเครื่องมือยังมีตัวควบคุม Run/Stop (เรียกใช้/หยุด) ของตัวเอง เรียกใช้การวินิจฉัยได้ครั้งละหนึ่งรายการ การเรียกใช้ที่เสร็จสิ้นหมายความว่าเครื่องมือทำงานจบแล้ว ไม่ได้หมายความว่าการตรวจวัดทุกรายการสำเร็จ ไม่มีการสรุปแบบเหมารวมว่า “เซิร์ฟเวอร์ออฟไลน์” การหมดเวลา จำนวนแพ็กเก็ต จำนวนการทำซ้ำ จำนวน hop สูงสุด ตัวแปลงชื่อ DNS การเลือกโปรโตคอล การเชื่อมต่อแบบ warm และการเปรียบเทียบ HTTP/HTTPS สามารถกำหนดค่าได้ การเปลี่ยนเป้าหมายจะล้าง IP ที่เลือกไว้ก่อนหน้า ประวัติสามารถเปิดอีกครั้ง เปรียบเทียบสองรายงาน ลบ นำเข้า JSON คัดลอก หรือส่งออก JSON/CSV/TXT ผ่านกล่องโต้ตอบเนทีฟของ Core ธีมสว่าง/มืด/ตามระบบใช้กับส่วนการวินิจฉัยและบันทึกไว้ในการกำหนดค่า UI ที่มีอยู่ CZ/DE/EN จะเปลี่ยนตามภาษาของแอปพลิเคชันทันที ## ส่วนประกอบและพฤติกรรมของโปรโตคอล | ส่วนประกอบ | การนำไปใช้และการตีความ | | --- | --- | | `common.js` | ตรวจสอบเป้าหมาย/ตัวเลือก ขีดจำกัด และค่า enum การแปลง IDNA สถิติเชิงตัวเลขจะไม่รวมค่าที่ไม่ทราบ | | `dnsDiagnostics.js` | การแปลงที่อยู่ของระบบใช้ `dns.lookup` เพื่อให้เป็นไปตามการกำหนดค่าของระบบปฏิบัติการและไฟล์ hosts คิวรีระเบียนใช้ DNS ผ่าน UDP แบบจำกัดขนาด และถอยกลับไปใช้ TCP สำหรับการตอบกลับที่ถูกตัดทอน โดยส่งไปยัง `dns.getServers()` หรือตัวแปลงชื่อแบบกำหนดเอง/สาธารณะที่เลือกไว้อย่างชัดแจ้ง ไม่มีการสลับไปใช้ DNS สาธารณะโดยปริยาย | | `processTools.js` | เรียกใช้ ping/traceroute ของระบบปฏิบัติการด้วยอาร์เรย์อาร์กิวเมนต์และ `shell: false` เอาต์พุตแบบจำกัด การหมดเวลาอย่างชัดแจ้ง และการล้าง abort/kill แยกวิเคราะห์การตอบกลับของแพ็กเก็ตและ hop แทนที่จะถือว่าระยะเวลาของกระบวนการเป็น RTT | | `httpDiagnostics.js` | curl ที่รวมมาสำหรับ HTTP/1.1, HTTP/2 และ HTTP/3 การตรวจสอบใบรับรองอย่างเข้มงวดและตระกูล IP ที่ตรึงไว้ แต่ละเวอร์ชันถูกร้องขอแยกกัน และบันทึกเวอร์ชันที่ใช้จริง | | `socketDiagnostics.js` | การตรวจวัดเวอร์ชัน TLS อย่างชัดแจ้ง การเชื่อมต่อ TCP แบบจำกัด/แบนเนอร์แบบพาสซีฟ การสังเกตคีย์โฮสต์ SSH ก่อนการยืนยันตัวตนโดยใช้การพึ่งพา ssh2 ที่มีอยู่ และการตรวจสอบ Upgrade ตาม RFC 6455 แบบไม่บังคับ | | `diagnosticsService.js` | เรียกใช้และยกเลิกเครื่องมือ เลือก/ตรวจสอบที่อยู่ สตรีมความคืบหน้า เก็บการวัดบางส่วน และควบคุมกำหนดเวลาของการเรียกใช้ | | `historyStore.js` | ประวัติในเครื่องแบบมีเวอร์ชันและจำกัดขนาด การปกปิดข้อมูล การนำเข้าที่ตรวจสอบสคีมา และการส่งออกข้อมูลที่วัดได้ | ### ICMP และเส้นทาง Ping ส่งคำขอ ICMP echo สี่รายการที่เรียกใช้แยกกันเป็นค่าเริ่มต้น ผลลัพธ์ประกอบด้วย RTT ที่วัดได้ต่อแพ็กเก็ต จำนวนที่รับ/ส่ง การสูญหาย ค่าต่ำสุด/เฉลี่ย/สูงสุด ส่วนเบี่ยงเบนมาตรฐานของประชากร ค่าเฉลี่ยของผลต่างสัมบูรณ์ระหว่าง RTT ที่วัดได้ต่อเนื่องกัน (jitter) TTL/Hop Limit เมื่อมีการพิมพ์ และเวลากำกับ การตอบกลับ `<1 ms` จะนับเป็นได้รับพร้อมขอบเขตบน แทนที่จะแต่งค่า RTT ที่เป็นตัวเลข RTT ที่ไม่ทราบจะไม่รวมในสถิติเวลาแฝง สถิติใช้หน้าต่างที่เก็บไว้ไม่เกิน 500 แพ็กเก็ต ส่วนจำนวนที่ส่ง/รับ/สูญหายครอบคลุมการเรียกใช้ทั้งหมด กราฟแสดง 200 การสังเกตล่าสุด โดยใช้สัญลักษณ์แยกสำหรับการตอบกลับ การตอบกลับที่ต่ำกว่าความละเอียด การตอบกลับที่หายไป และการหมดเวลาของคำขอ/กระบวนการอย่างชัดแจ้ง การตอบกลับที่หายไปอาจเกิดจากการกรอง ICMP การสูญหายของแพ็กเก็ต หรือการหมดเวลา การสังเกตเหล่านี้ไม่สามารถระบุไฟร์วอลล์ได้อย่างแน่ชัด ไฟล์ปฏิบัติการที่ไม่มี ความล้มเหลวด้านสิทธิ์ในเครื่อง และการเรียกใช้เครื่องมือที่ไม่ถูกต้อง เป็นข้อผิดพลาดของเครื่องมือแยกต่างหาก ไม่ใช่การสูญหายของแพ็กเก็ตหรือเซิร์ฟเวอร์ไม่พร้อมใช้งาน ไม่มีการขอยกระดับสิทธิ์ Traceroute สตรีม hop ที่อยู่ การตรวจวัดแต่ละครั้ง ค่าเฉลี่ย และเปอร์เซ็นต์ของการตรวจวัดที่ไม่ได้รับคำตอบที่สังเกตได้ DNS ย้อนกลับจะถูกแปลงหลังได้เส้นทาง โดยใช้ตัวแปลงชื่อที่เลือก การทำซ้ำจะเปรียบเทียบลำดับที่อยู่ของ hop ที่สังเกตได้ ความแตกต่างอาจเกิดจากการกระจายโหลด hop ระหว่างทางที่ไม่ตอบไม่ได้พิสูจน์ว่าเส้นทางเสีย เมทาดาทาดิบของการตรวจวัดและวิธีการจะแสดงในรายละเอียดที่ขยายได้ macOS ต้องใช้เวลารอของ traceroute เป็นจำนวนเต็มวินาที และจะบันทึกค่าการหมดเวลาที่ปัดเศษแล้วซึ่งมีผลจริง ### DNS ระเบียนทั้งสิบสองประเภท ได้แก่ A, AAAA, CNAME, MX, NS, TXT, SOA, SRV, CAA, PTR, DS และ DNSKEY การแยกวิเคราะห์รูปแบบ wire ของ DNS จะตรวจสอบตัวตนของธุรกรรม/คำถาม ขนาดระเบียน การวนซ้ำของตัวชี้การบีบอัด และขีดจำกัดของข้อความ คำตอบจะคง TTL ของระเบียน เวลาของคิวรี ตัวแปลงชื่อ และสถานะ NXDOMAIN/NODATA/SERVFAIL/refused/timeout การค้นหาที่อยู่ของระบบปฏิบัติการไม่สามารถให้ TTL ได้ แต่คิวรีระเบียนแยกต่างหากทำได้ การติดตาม CNAME จำกัดไว้ที่แปดลิงก์พร้อมการตรวจจับวงวน การตรวจสอบความสอดคล้องจะทำซ้ำคำตอบ A/AAAA จากตัวแปลงชื่อที่เลือก และทำ PTR แบบยืนยันไปข้างหน้าสำหรับการทดสอบ DNS ที่ใช้ IP แบบ literal คำตอบที่เปลี่ยนไปเป็นการสังเกต ไม่ใช่หลักฐานของข้อผิดพลาด DNS คิวรี SRV ใช้ชื่อเป้าหมายตามที่ป้อน ให้ป้อนชื่อบริการ เช่น `_service._tcp.example.org` เมื่อจำเป็น DNSSEC **ไม่ได้รับการตรวจสอบ** เสมอ การมี DS/DNSKEY และแม้แต่แฟล็ก AD ของตัวแปลงชื่อจะไม่ถือเป็นการตรวจสอบอย่างอิสระ ### HTTP ประสิทธิภาพ และการบีบอัด HTTP/1.1 จะถือว่ารองรับก็ต่อเมื่อเวอร์ชันนั้นถูกส่งกลับมาจริงเท่านั้น HTTP/2 ผ่าน HTTPS ต้องมี h2 ที่เจรจาได้ ไม่มีการติดป้ายใหม่ให้การถอยกลับ HTTP/2 แบบไม่เข้ารหัสใช้ prior knowledge ไม่ใช่การตรวจวัด Upgrade ของ HTTP/1.1 การตรวจสอบ TLS ยังคงเข้มงวดสำหรับทุกคำขอ HTTP/WebSocket การเปลี่ยนเส้นทางด้วยตนเองจำกัดไว้ที่แปดครั้ง วงวน ปลายทางที่ไม่ถูกต้อง และการเปลี่ยนเส้นทางที่มากเกินไปจะล้มเหลวอย่างชัดแจ้ง ห่วงโซ่ทั้งหมดจะบันทึกการเปลี่ยนแปลงข้ามโดเมนและการลดระดับจาก HTTPS การเปลี่ยนแปลงสคีมและ www จะมองเห็นได้ใน URL ต้นทาง/ปลายทาง ข้อมูลรับรองและสคีมการเปลี่ยนเส้นทางที่ไม่ใช่ HTTP(S) จะถูกปฏิเสธ การเปลี่ยนเส้นทางข้ามโฮสต์แต่ละครั้งจะถูกแปลงชื่ออย่างอิสระผ่านตัวแปลงชื่อและตระกูล IP ที่เลือก การวัดประกอบด้วย DNS (เมื่อมีการดำเนินการ), TCP, TLS, TTFB ของการตอบกลับสุดท้าย TTFB โดยรวมที่รวม DNS/การเปลี่ยนเส้นทาง การดาวน์โหลด การเปลี่ยนเส้นทางและเวลารวมจริง จำนวนไบต์ของเอนทิตีจริง ความเร็วในการถ่ายโอน สถานะ เฮดเดอร์การตอบกลับ ที่อยู่/พอร์ตจริงของเซิร์ฟเวอร์ ALPN และการใช้การเชื่อมต่อซ้ำที่ตรวจสอบแล้ว ระยะ DNS/TCP/TLS ที่ไม่ได้ดำเนินการบนการเชื่อมต่อที่ตรึงไว้หรือใช้ซ้ำจะมีค่า `N/A` ไม่ใช่ศูนย์ปลอม QUIC ไม่มีระยะ TCP การจับมือของ QUIC จะถูกบันทึกแยกต่างหาก โอเวอร์เฮดของการถ่ายโอนเฮดเดอร์หรือโอเวอร์เฮดของ wire ทั้งหมดไม่ได้ถูกอ้างว่าเป็นการวัดไบต์ของเอนทิตี ค่าเหล่านี้เป็นเวลาของเซิร์ฟเวอร์/เครือข่าย ไม่ใช่การแสดงผลหน้าเว็บหรือคะแนน Lighthouse โปรโตคอลที่เลือกแต่ละรายการใช้เป้าหมายและจำนวนการทำซ้ำเดียวกัน IPv4/IPv6 และ HTTP/HTTPS เป็นตัวเลือกการเปรียบเทียบอย่างชัดแจ้ง สคีมทางเลือกใช้พอร์ตเริ่มต้นของตน ทุกโปรโตคอลจะเริ่มกระบวนการไคลเอนต์ที่รวมมาแยกกันสำหรับแต่ละตัวอย่าง ไม่มีการอ้างการใช้การเชื่อมต่อซ้ำ สถิติเวลารวมประกอบด้วยค่าต่ำสุด/เฉลี่ย/มัธยฐาน/สูงสุด/P95 แบบ nearest-rank และอัตราข้อผิดพลาดของการรับส่ง/โปรโตคอลแยกต่างหาก รหัสสถานะ HTTP ยังคงมองเห็นได้แม้เซิร์ฟเวอร์จะส่งการตอบกลับ 4xx/5xx สำเร็จ การบีบอัดจะส่ง identity, gzip, deflate, br และ zstd (เมื่อรันไทม์รองรับ) เป็นคำขอ Accept-Encoding แยกกัน Content-Encoding ต้องตรงกัน และการคลายการบีบอัดแบบจำกัดต้องสำเร็จ อัตราส่วนจะคำนวณเฉพาะเมื่อแฮชของเนื้อหาที่ถอดรหัสแล้ว URL สุดท้าย และสถานะตรงกับค่าอ้างอิง identity การเข้ารหัสที่ถูกเพิกเฉยถือว่าไม่รองรับ เนื้อหาที่เปลี่ยนแปลง/ไดนามิกจะไม่มีอัตราส่วน นี่คือการสังเกตสำหรับ URL/สถานะนั้น ไม่ใช่การรองรับของเซิร์ฟเวอร์โดยทั่วไป การตรวจสอบเฮดเดอร์ด้านความปลอดภัยแสดงการมีอยู่และค่าของ HSTS, CSP, X-Content-Type-Options, Referrer-Policy, Permissions-Policy และ X-Frame-Options คำสั่ง frame-ancestors ของ CSP สามารถใช้แทนรายการสุดท้ายได้ การมีอยู่ไม่ได้พิสูจน์ว่านโยบายถูกกำหนดค่าอย่างถูกต้องหรือเว็บไซต์ปลอดภัย ### ข้อกำหนดและหลักฐานของ HTTP/3 HTTP/1.1, HTTP/2 และ HTTP/3 ใช้ไคลเอนต์ curl ที่รวมมาตัวเดียวกัน macOS arm64 และ Linux x64 ใช้ curl 8.22.0, OpenSSL 3.5.9, nghttp2 1.70.0, ngtcp2 1.25.0 และ nghttp3 1.18.0 ส่วน Windows x64 ใช้บิลด์แบบสแตติกอย่างเป็นทางการ curl-for-win 8.22.0_3 จาก curl.se พร้อม LibreSSL 4.3.3 และไลบรารี HTTP ชุดเดียวกัน ไม่ต้องถอยกลับไปใช้ curl ของระบบ ไม่ต้องดาวน์โหลดขณะรัน และไม่ต้องใช้สิทธิ์ผู้ดูแลระบบ สูตรการบิลด์ต้นทางที่ทำซ้ำได้สำหรับ Windows อยู่ที่ https://github.com/curl/curl-for-win/tree/9d77e31e . บิลด์ด้วย `python3 scripts/native/build.py` (Windows: `python scripts/native/build.py`) ก่อนการแพ็กเกจ macOS/Linux ต้องมีเครื่องมือ C/C++, CMake, Ninja, Perl, make และ pkg-config ซอร์สถูกตรึงด้วยเวอร์ชันและ SHA-256 ต้นทางใน `scripts/native/dependencies.lock.json` สคริปต์จะตรวจสอบทุกการดาวน์โหลด ลิงก์ไลบรารีการรับส่งข้อมูลของบุคคลที่สามแบบสแตติก และล้มเหลวหากไม่มีฟีเจอร์ HTTP2/HTTP3/SSL มีเพียงไลบรารีของระบบปฏิบัติการที่ยังคงเป็นแบบไดนามิก Windows ใช้ไฟล์บีบอัดไบนารีอย่างเป็นทางการที่ถูกตรึงไว้ ไม่ใช่สแต็กการรับส่งข้อมูลของ Windows ที่คอมไพล์ในเครื่อง ไฟล์ CA ที่รวมมามีแฮชที่ตรึงไว้ของตัวเอง สัญญาอนุญาตของส่วนประกอบและแหล่งที่มาของบิลด์ต้นทางมาพร้อมกับรันไทม์ ไคลเอนต์และที่เก็บความเชื่อถือถูกติดตั้งไว้นอก app.asar ใน `resources/native-runtime/-/` การวินิจฉัยแต่ละครั้งจะตรวจสอบแฮชของส่วนประกอบ สถาปัตยกรรม และความสามารถของไฟล์ปฏิบัติการก่อนใช้งาน ไฟล์กำหนดค่า พร็อกซี การแทนที่ความเชื่อถือ TLS ผ่านตัวแปรสภาพแวดล้อม และตัวแปรสำหรับฉีดไลบรารีจะไม่ถูกนำมาใช้ curl ทำงานด้วยพาธแบบสัมบูรณ์ ปิดการใช้เชลล์ ใช้ความเชื่อถือ CA ที่ตรวจสอบแล้ว ระบุตระกูล IP อย่างชัดแจ้ง ไม่มีคุกกี้ ไม่เปลี่ยนเส้นทางอัตโนมัติ และจำกัดเอาต์พุตและเวลา การเปลี่ยนเส้นทางจะได้รับการตรวจสอบและแปลงชื่อใหม่โดยแอปพลิเคชัน รองรับ HTTPS บนพอร์ตอื่นนอกเหนือจาก 443 HTTP/3 ใช้ `--http3-only` และจะได้รับการยืนยันหลังจากการถ่ายโอนเสร็จสมบูรณ์ซึ่งรายงาน HTTP เวอร์ชัน 3 และการตรวจสอบใบรับรองสำเร็จเท่านั้น การตอบกลับข้อผิดพลาด HTTP เช่น 404 สามารถยืนยันโปรโตคอลได้ Alt-Svc เป็นการประกาศ ไม่ใช่หลักฐาน การหมดเวลาของ QUIC ความล้มเหลวของใบรับรอง ความล้มเหลวของ DNS การปฏิเสธการเชื่อมต่อ โปรโตคอลที่ไม่เข้ากัน และความล้มเหลวของส่วนประกอบยังคงแยกแยะได้ การหมดเวลาของ UDP ทำให้การรองรับของเซิร์ฟเวอร์ยังไม่ได้รับการยืนยัน เวลาการจับมือของ QUIC จะไม่ถูกรายงานเป็นเวลาของ TCP การวัดแต่ละครั้งจะเริ่มกระบวนการ/การเชื่อมต่อแยกกัน ตัวเลือก warm ไม่ได้อ้างว่ามีการใช้การเชื่อมต่อซ้ำสำหรับไคลเอนต์ที่รวมมา วิธีนี้ทำให้การเปรียบเทียบโปรโตคอลสอดคล้องกัน รายงานมีเวอร์ชันของรันไทม์ ความสามารถ การตรวจสอบ TLS และเวลาของ QUIC ส่วนประวัติ/การส่งออกจะลบเนื้อหา คิวรีของ URL และเฮดเดอร์การยืนยันตัวตนออก อัปเดตค่าที่ตรึงไว้เหล่านี้และบิลด์ใหม่สำหรับทุกแพลตฟอร์มที่รองรับเมื่ออัปเดตสแต็กการรับส่งข้อมูลหรือที่เก็บความเชื่อถือ CA อาร์ติแฟกต์ที่เผยแพร่และสแนปช็อตของซอร์สจะไม่เปลี่ยนแปลง ## IPC ของ Core Preload เปิดให้ใช้เฉพาะ `window.chjCore.diagnostics` ตัวจัดการทั้งหมดยังคงการตรวจสอบผู้ส่งที่เป็นหน้าต่างหลักที่มีอยู่ และงานด้านเครือข่ายยังคงอยู่ในกระบวนการหลัก ผลลัพธ์ใช้ `{ ok: true, value }` หรือ `{ ok: false, error: { code, message } }` | ช่องสัญญาณ / เมธอด preload | เพย์โหลด / ผลลัพธ์ | | --- | --- | | `diagnostics:resolve` / `resolve(options)` | เป้าหมาย/การตั้งค่าที่ตรวจสอบแล้ว → เป้าหมายและที่อยู่ที่แปลงชื่อแล้ว คำขอแปลงชื่อพร้อมกันได้สูงสุดสองรายการ | | `diagnostics:start` / `start(options)` | เป้าหมาย/การตั้งค่า/การเลือกเครื่องมือที่ตรวจสอบแล้ว → ID งานแบบทึบและรายงานเริ่มต้น | | `diagnostics:cancel` / `cancel(id, tool?)` | ยกเลิกเครื่องมือที่ทำงานอยู่/อยู่ในคิวหนึ่งรายการหรือการเรียกใช้ทั้งหมด | | `diagnostics:get` / `get(id)` | สแนปช็อตของการเรียกใช้ที่รู้จักหรือรายงานที่บันทึกไว้ | | `diagnostics:history` / `history()` | สรุปประวัติในเครื่อง | | `diagnostics:removeHistory` / `removeHistory(id)` | ลบรายการประวัติที่เลือก | | `diagnostics:copy` / `copy(id, format)` | กระบวนการหลักเขียนรายงานที่รู้จักซึ่งปกปิดข้อมูลแล้วลงในคลิปบอร์ด | | `diagnostics:export` / `export(id, format)` | JSON/CSV/TXT ผ่านกล่องโต้ตอบบันทึกแบบเนทีฟ renderer ไม่สามารถระบุพาธของระบบไฟล์ได้ | | `diagnostics:import` / `import()` | ตัวเลือกไฟล์แบบเนทีฟ การตรวจสอบขนาด/สคีมา/ความลึก และการปกปิดข้อมูลก่อนจัดเก็บ | | `diagnostics:progress` / `onProgress(callback)` | ที่อยู่ที่แปลงชื่อแล้ว การเริ่ม/เสร็จสิ้นของเครื่องมือ แพ็กเก็ต hop ตัวอย่าง HTTP และการเสร็จสิ้น ส่งคืน callback สำหรับยกเลิกการสมัครรับ | ไม่มีการเปิดให้ใช้ API เชลล์ ระบบไฟล์ หรือเครือข่ายแบบทั่วไป การแยกบริบท แซนด์บ็อกซ์ การผสานรวม Node ที่ปิดไว้ และ CSP ของ renderer ที่มีอยู่ยังคงเปิดใช้งาน สัญญาของปลั๊กอินที่มีอยู่และการตรวจสอบ/ข้อยกเว้นของตัวอัปเดตไม่เปลี่ยนแปลง ## งบประมาณและข้อมูลในเครื่อง - การเรียกใช้หนึ่งครั้ง เครื่องมือที่ทำงานพร้อมกันสองรายการ การตรวจวัดตระกูล IP สูงสุดสองรายการต่อเครื่องมือ TCP ยังจำกัดแต่ละที่อยู่ไว้ที่สี่การเชื่อมต่อ - การหมดเวลาต่อการดำเนินการ 250–30000 ms; 1–100 แพ็กเก็ต, 1–20 การทำซ้ำ, 1–40 hop, 1–16 พอร์ต การเรียกใช้ปกติหยุดที่ห้านาที ping ต่อเนื่องหยุดที่สามสิบนาที กระบวนการย่อยของ traceroute มีขีดจำกัดเพิ่มเติม 180 วินาที - เอาต์พุตของกระบวนการโดยปกติ 256 KiB เนื้อหาเอนทิตี HTTP 2 MiB เนื้อหาหลังคลายการบีบอัด 8 MiB เฮดเดอร์ HTTP มีขีดจำกัด ไม่มีเนื้อหาการตอบกลับใดเข้าสู่ประวัติ - เก็บไว้ไม่เกิน 500 แพ็กเก็ต/เหตุการณ์ความคืบหน้า การเรียกใช้ในหน่วยความจำห้ารายการ รายงานประวัติสามสิบรายการ และประวัติ 10 MiB ประวัติใช้ตัวเขียนแบบอะตอมมิกส่วนตัวที่มีอยู่ที่ `/diagnostics/history.json` (โหมด 0600) - การนำเข้ามีขนาดไม่เกิน 2 MiB สคีมา 1 พร้อมการซ้อนแบบจำกัดและชุดผลลัพธ์ที่ตรวจสอบแล้ว เซลล์ CSV จะถูก escape และคำนำหน้าสูตรจะถูกทำให้เป็นกลาง คิวรี/แฟรกเมนต์ของ URL ข้อมูลรับรอง คุกกี้ เฮดเดอร์การยืนยันตัวตน และเนื้อหาดิบจะไม่รวมอยู่ในรายงานที่จัดเก็บ/คัดลอก/ส่งออก รายละเอียดดิบแสดงข้อมูลที่มีโครงสร้างที่วัดได้ ไม่ใช่การจับแพ็กเก็ตหรือเนื้อหาการตอบกลับที่เก็บไว้ - ไม่มีการซิงโครไนซ์กับคลาวด์ การเข้าสู่ระบบอัตโนมัติ การเปลี่ยนแปลงการกำหนดค่าเซิร์ฟเวอร์ หรือการสแกนแบบรุนแรง/ไม่จำกัด ผู้ใช้เป็นผู้เลือกเป้าหมาย/พอร์ต/ตัวแปลงชื่ออย่างชัดแจ้ง ## ข้อกำหนดของแพลตฟอร์มและการตรวจสอบ | แพลตฟอร์ม | ICMP | เส้นทาง | โปรโตคอลอื่น | | --- | --- | --- | --- | | Windows 10/11 | `ping.exe -4/-6` | `tracert.exe -4/-6`, ICMP | curl.exe ที่รวมมาพร้อม HTTP/2 และ HTTP/3 ฟิลด์ RTT ที่แปลแล้วไม่ขึ้นกับคำว่า “time” | | macOS | `/sbin/ping`, `/sbin/ping6` | `/usr/sbin/traceroute`, `/usr/sbin/traceroute6`, UDP; เวลารอเป็นจำนวนเต็มวินาที | curl ที่รวมมาพร้อม HTTP/2 และ HTTP/3 | | Ubuntu/Linux | iputils `ping -4/-6` | `traceroute -4/-6` มาตรฐาน, UDP | curl ที่รวมมาพร้อม HTTP/2 และ HTTP/3 เครื่องมือ ICMP/เส้นทางที่ไม่มีจะถูกรายงานแยกต่างหาก | ไม่มีการเพิ่มการพึ่งพา npm ใหม่ การนำไปใช้ใช้โมดูลในตัวของ Node และ ssh2 ที่มีอยู่ของแอปพลิเคชัน ไม่ติดตั้งเครื่องมือของระบบและไม่ขอสิทธิ์ผู้ดูแลระบบ ไฟร์วอลล์และข้อจำกัดของ UDP อาจทำให้การทดสอบพิสูจน์การรองรับไม่ได้ และไม่สามารถอนุมานสิ่งเหล่านี้ได้จากการหมดเวลาเพียงอย่างเดียว ความครอบคลุมของการทดสอบอัตโนมัติอยู่ใน `diagnosticsCore.test.js`, `diagnosticsNetwork.test.js`, `diagnosticsHttp.test.js` และ `diagnosticsIpc.test.js`: การตรวจสอบ/IPv6 แบบ literal ข้อมูลทดสอบ DNS UDP+TCP แบบเนทีฟ/ในเครื่อง คำตอบที่หายไป/สองตระกูลและข้อผิดพลาดของตัวแปลงชื่อ CNAME/ความสอดคล้อง ข้อมูลทดสอบอาร์กิวเมนต์/การแยกวิเคราะห์ของระบบปฏิบัติการ กระบวนการลูกจริงที่จำกัดขอบเขต การสังเกต ICMP ที่ถูกบล็อก HTTP/1.1 และ TLS h2 ในเครื่องจริง การเปลี่ยนเส้นทาง/ขีดจำกัดเนื้อหา/การหมดเวลา/การใช้ซ้ำ การบีบอัดที่เปิดใช้/ถูกเพิกเฉย ความสามารถของ HTTP3/การแยกวิเคราะห์ผลลัพธ์ที่สำเร็จ/การปฏิเสธการถอยกลับ ความเชื่อถือ CA ในเครื่อง/ความไม่ตรงกัน/การหมดอายุ และ HTTP/HTTPS ผ่าน IPv6 จริง การเชื่อมต่อ TCP/ถูกปฏิเสธ/การหมดเวลาจำลอง การจับมือ WebSocket และ SSH ก่อนการยืนยันตัวตนจริง การยกเลิก/การล้าง/ผลลัพธ์บางส่วน สถานะออฟไลน์ การบันทึกและอ่านกลับประวัติส่วนตัว/การปฏิเสธการนำเข้า/การส่งออก IPC ที่เชื่อถือได้ และการสมัครรับของ preload `npm test` เรียกใช้การทดสอบแบบกำหนดผลได้โดยไม่ต้องใช้เซิร์ฟเวอร์ทดสอบสาธารณะ `npm run test:diagnostics:ui` เรียกใช้ `scripts/smokeDiagnostics.js` ในเดสก์ท็อป Electron แบบกราฟิก โดยใช้ UI/preload/IPC สำหรับการผลิตและการตรวจวัด HTTP/การบีบอัดในเครื่องจริง บริการที่ไม่เกี่ยวข้องจะถูกจำลองหรือทำให้ออฟไลน์ในชุดทดสอบนี้เท่านั้น การทดสอบจะตรวจสอบลำดับการนำทาง ผลลัพธ์ของโปรโตคอล การคงอยู่ของข้อมูล CZ/DE/EN ทั้งสองธีม การล้นในหน้าต่างแคบ และค่ากำหนดของแซนด์บ็อกซ์ หากเชลล์ตั้งค่า ELECTRON_RUN_AS_NODE ไว้ ให้ยกเลิกการตั้งค่าสำหรับคำสั่งนี้ การตรวจสอบรันไทม์ในปัจจุบันครอบคลุมการถ่ายโอน QUIC ที่ควบคุมได้ IPv4/IPv6 HTTPS บนพอร์ตที่ไม่ใช่ค่าเริ่มต้น การตอบกลับ 404 ความล้มเหลวของ TLS และบริการที่ใช้เฉพาะ TCP แต่ประกาศ Alt-Svc ผลลัพธ์ของแต่ละบิลด์มาพร้อมกับแต่ละรุ่น ข้อจำกัดแบบไม่บังคับที่ระบุชัดแจ้ง: ไม่มีการตรวจสอบ DNSSEC อย่างอิสระ (ต้องใช้ตัวแปลงชื่อที่ตรวจสอบได้ครบถ้วน/วงจรชีวิตของ trust anchor) ไม่มีการตรวจสอบ Lighthouse (เฉพาะเวลาของเซิร์ฟเวอร์/เครือข่าย) ไม่มีการตรวจสอบ TLS ที่เลิกใช้แล้วหรือบริการเพิกถอน/CT ไม่มีการอ้างการใช้ซ้ำแบบ warm ของ HTTP3 และไม่มีการวัดการใช้ซ้ำแบบ warm ของ HTTP/3 ความสามารถที่ไม่รองรับจะแสดงออกมาแทนการจำลอง ## ไฟล์ในการเปลี่ยนแปลงนี้ สร้างใหม่: ไฟล์บริการเจ็ดไฟล์ใน `src/main/diagnostics/`; `src/renderer/diagnostics.js`, `diagnosticsI18n.js`, `diagnostics.css`; ไฟล์ `test/diagnostics*.test.js` สี่ไฟล์; ไฟล์ห้าไฟล์ใต้ `test/fixtures/diagnostics/`; `scripts/smokeDiagnostics.js`; เอกสารนี้ ผสานรวม/อัปเดต: `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` ระดับราก, `.gitignore` (ข้อยกเว้นสำหรับข้อมูลทดสอบสาธารณะสี่รายการ) และรายการอนุญาตของ gitleaks ระดับรากที่ระบุเฉพาะข้อมูลทดสอบคีย์ทดสอบ TLS ที่ตั้งใจเปิดเผยต่อสาธารณะ คีย์ส่วนตัวของ CA ที่ใช้ลงนามถูกทิ้งไปแล้ว และรันไทม์ของแอปพลิเคชันไม่เคยใช้ข้อมูลทดสอบนี้