Improved IP detection and display logic to always show IPv4 format, converting IPv6-mapped IPv4 addresses (e.g., ::ffff:127.0.0.1) and IPv6 loopback (::1) to 127.0.0.1. Updated API endpoint, display components, and added dedicated test/debug pages for IP format and detection. Added documentation summarizing the fixes and new features.
45 lines
1.3 KiB
JavaScript
45 lines
1.3 KiB
JavaScript
/**
|
|
* IP 檢測功能測試腳本
|
|
* 用於測試和驗證IP白名單功能
|
|
*/
|
|
|
|
const { getClientIp, getDetailedIpInfo, cleanIpAddress } = require('../lib/ip-utils.ts');
|
|
|
|
// 模擬請求對象
|
|
const mockRequest = {
|
|
headers: {
|
|
'x-forwarded-for': '::ffff:127.0.0.1, 192.168.1.100',
|
|
'x-real-ip': '::ffff:127.0.0.1',
|
|
'x-client-ip': '::1',
|
|
'connection': {
|
|
'remoteAddress': '::ffff:127.0.0.1'
|
|
},
|
|
'socket': {
|
|
'remoteAddress': '::1'
|
|
}
|
|
},
|
|
ip: '::ffff:127.0.0.1'
|
|
};
|
|
|
|
console.log('=== IP 檢測測試 ===');
|
|
|
|
// 測試 cleanIpAddress 函數
|
|
console.log('\n1. 測試 cleanIpAddress 函數:');
|
|
console.log('::ffff:127.0.0.1 ->', cleanIpAddress('::ffff:127.0.0.1'));
|
|
console.log('::1 ->', cleanIpAddress('::1'));
|
|
console.log('127.0.0.1 ->', cleanIpAddress('127.0.0.1'));
|
|
console.log('192.168.1.1 ->', cleanIpAddress('192.168.1.1'));
|
|
|
|
// 測試詳細IP信息
|
|
console.log('\n2. 測試詳細IP信息:');
|
|
const detailedInfo = getDetailedIpInfo(mockRequest);
|
|
console.log('檢測到的IP:', detailedInfo.detectedIp);
|
|
console.log('所有找到的IP:', detailedInfo.allFoundIps);
|
|
console.log('IP來源:', detailedInfo.ipSources);
|
|
|
|
// 測試客戶端IP獲取
|
|
console.log('\n3. 測試客戶端IP獲取:');
|
|
const clientIp = getClientIp(mockRequest);
|
|
console.log('最終檢測到的IP:', clientIp);
|
|
|
|
console.log('\n=== 測試完成 ===');
|