ตรวจสอบ IP ขาออกที่สังเกตได้จากส่วนขยาย Chrome
ส่งคำขอแบบจำกัดจากต้นกำเนิดของส่วนขยายไปยังปลายทางที่ควบคุมได้ และรายงานว่าการตรวจสอบนั้นพิสูจน์อะไรจริง
การตรวจสอบพร็อกซีในส่วนขยาย Chrome ต้องมีปลายทางที่ตอบสนองได้คาดเดาได้ ใช้ปลายทาง HTTPS ที่คุณควบคุม เช่นปลายทางที่ส่งคืนออบเจ็กต์ JSON ขนาดเล็กซึ่งมีที่อยู่ที่มันเห็น
เรียกใช้คำขอจากบริบทของส่วนขยาย เช่น service worker หรือหน้าส่วนขยาย โดยใส่ปลายทางไว้ใน host permissions ของ manifest:
"host_permissions": ["https://probe.example/*"]
สิทธิ์ของโฮสต์ไม่ได้ให้สิทธิ์ข้ามต้นกำเนิดแบบเดียวกันแก่ content script ให้เก็บการตรวจสอบไว้ในบริบทของส่วนขยายแทนที่จะถือว่าสคริปต์ที่ถูกฉีดเข้าสามารถส่งคำขอเดียวกันได้
async function probe() {
const controller = new AbortController();
const timer = setTimeout(() => controller.abort(), 5000);
try {
const response = await fetch('https://probe.example/ip', {
cache: 'no-store',
signal: controller.signal,
});
if (!response.ok) throw new Error(`HTTP ${response.status}`);
const result = await response.json();
if (typeof result.ip !== 'string') throw new Error('Bad probe body');
return result.ip;
} finally {
clearTimeout(timer);
}
}
ชื่อโฮสต์เป็นเพียงตัวแทน เซิร์ฟเวอร์และไคลเอนต์ต้องตกลงรูปแบบการตอบสนองและนโยบายแคช จัดการคำขอที่ถูกปฏิเสธและการตอบสนองที่ผิดรูปแบบในตัวเรียกของส่วนขยาย แทนที่จะแสดงเป็นที่อยู่ขาออกที่ใช้ได้
ตั้งชื่อการสังเกตให้แม่นยำ
ผลลัพธ์ที่สำเร็จพิสูจน์ว่าคำขอนี้ไปถึงปลายทางและได้รับการตอบสนองในรูปแบบที่คาดไว้ เปรียบเทียบที่อยู่ที่สังเกตได้กับเส้นทางที่คุณตั้งใจ ในจุดที่การเปรียบเทียบนั้นมีความหมาย IP ที่พร็อกซีที่กำหนดไว้ฟังอยู่ไม่จำเป็นต้องเป็นทางออกสาธารณะของมัน.
กฎ PAC หรือรายการข้ามอาจส่งการตรวจสอบไปโดยตรงในขณะที่ปลายทางอื่นใช้พร็อกซี การอ่านการตั้งค่าพร็อกซีให้หลักฐานการกำหนดค่า; คำขอให้หลักฐานสำหรับปลายทางนี้ ไม่มีสิ่งใดเพียงอย่างเดียวพิสูจน์ได้ว่าทุกแท็บหรือ URL ไปตามเส้นทางเดียวกัน
แยกเวลาหมดอายุ ข้อผิดพลาด HTTP และเนื้อความที่ไม่คาดคิดออกจากกันในอินเทอร์เฟซ “การตรวจสอบนี้ล้มเหลว” มีประโยชน์กว่าการประกาศว่าเครื่องทั้งหมดออฟไลน์หลังคำขอเดียว