78 lines
2.1 KiB
JavaScript
78 lines
2.1 KiB
JavaScript
const cfRange = [
|
|
'173.245.48.0/20',
|
|
'103.21.244.0/22',
|
|
'103.22.200.0/22',
|
|
'103.31.4.0/22',
|
|
'141.101.64.0/18',
|
|
'108.162.192.0/18',
|
|
'190.93.240.0/20',
|
|
'188.114.96.0/20',
|
|
'197.234.240.0/22',
|
|
'198.41.128.0/17',
|
|
'162.158.0.0/15',
|
|
'104.16.0.0/13',
|
|
'104.24.0.0/14',
|
|
'172.64.0.0/13',
|
|
'131.0.72.0/22'
|
|
];
|
|
const cfRange6 = [
|
|
'2400:cb00::/32',
|
|
'2606:4700::/32',
|
|
'2803:f800::/32',
|
|
'2405:b500::/32',
|
|
'2405:8100::/32',
|
|
'2a06:98c0::/29',
|
|
'2c0f:f248::/32'
|
|
];
|
|
// TODO: implement IPv6 check
|
|
function ip42int(address) {
|
|
let _4 = address.split('.');
|
|
let rtn = 0;
|
|
rtn += Number(_4[0]) * 0x100**3;
|
|
rtn += Number(_4[1]) * 0x100**2;
|
|
rtn += Number(_4[2]) * 0x100;
|
|
rtn += Number(_4[3]);
|
|
return rtn;
|
|
}
|
|
function calc4range(range) {
|
|
let base = range.split('/')[0];
|
|
let prefix = Number(range.split('/')[1]);
|
|
let hostN = 2 ** (32-prefix);
|
|
let hostMin = ip42int(base);
|
|
hostMin -= hostMin % hostN--;
|
|
let hostMax = hostMin + hostN;
|
|
return [hostMin, hostMax];
|
|
}
|
|
function in_4range(range, address) {
|
|
range = calc4range(range);
|
|
address = ip42int(address);
|
|
return address >= range[0] && address <= range[1];
|
|
}
|
|
function is_cloudfucked(address) {
|
|
return cfRange.some(range => in_4range(range, address));
|
|
}
|
|
browser.runtime.onConnect.addListener(function(port) {
|
|
port.onMessage.addListener(async function(data) {
|
|
switch (data.action) {
|
|
case 'test':
|
|
console.log(`testing ${data.hostname}`);
|
|
let result = await browser.dns.resolve(data.hostname, ['disable_ipv6']);
|
|
let cloudfucked = result.addresses.some(ip => is_cloudfucked(ip));
|
|
port.postMessage({
|
|
"hostname": data.hostname,
|
|
"cloudfucked": cloudfucked
|
|
});
|
|
break;
|
|
case 'prefs-update':
|
|
console.log('attempting to update preferences', data.prefs);
|
|
break;
|
|
case 'prefs-fetch':
|
|
console.log('attempting to fetch preferences');
|
|
break;
|
|
default:
|
|
console.log(`unknown action ${data.action}`);
|
|
break;
|
|
}
|
|
});
|
|
});
|