mirror of
https://github.com/torappinfo/uweb.git
synced 2024-08-14 23:54:59 +00:00
136 lines
3.8 KiB
JavaScript
136 lines
3.8 KiB
JavaScript
const SYDNEY_ORIGIN = 'https://sydney.bing.com';
|
|
const KEEP_REQ_HEADERS = [
|
|
'accept',
|
|
'accept-encoding',
|
|
'accept-language',
|
|
'connection',
|
|
'cookie',
|
|
'upgrade',
|
|
'user-agent',
|
|
'sec-websocket-extensions',
|
|
'sec-websocket-key',
|
|
'sec-websocket-version',
|
|
'x-request-id',
|
|
'content-length',
|
|
'content-type',
|
|
'access-control-request-headers',
|
|
'access-control-request-method',
|
|
];
|
|
const IP_RANGE = [
|
|
['3.2.50.0', '3.5.31.255'], //192,000
|
|
['3.12.0.0', '3.23.255.255'], //786,432
|
|
['3.30.0.0', '3.33.34.255'], //205,568
|
|
['3.40.0.0', '3.63.255.255'], //1,572,864
|
|
['3.80.0.0', '3.95.255.255'], //1,048,576
|
|
['3.100.0.0', '3.103.255.255'], //262,144
|
|
['3.116.0.0', '3.119.255.255'], //262,144
|
|
['3.128.0.0', '3.247.255.255'], //7,864,320
|
|
];
|
|
|
|
/**
|
|
* 随机整数 [min,max)
|
|
* @param {number} min
|
|
* @param {number} max
|
|
* @returns
|
|
*/
|
|
const getRandomInt = (min, max) => Math.floor(Math.random() * (max - min)) + min;
|
|
|
|
/**
|
|
* ip 转 int
|
|
* @param {string} ip
|
|
* @returns
|
|
*/
|
|
const ipToInt = (ip) => {
|
|
const ipArr = ip.split('.');
|
|
let result = 0;
|
|
result += +ipArr[0] << 24;
|
|
result += +ipArr[1] << 16;
|
|
result += +ipArr[2] << 8;
|
|
result += +ipArr[3];
|
|
return result;
|
|
};
|
|
|
|
/**
|
|
* int 转 ip
|
|
* @param {number} intIP
|
|
* @returns
|
|
*/
|
|
const intToIp = (intIP) => {
|
|
return `${(intIP >> 24) & 255}.${(intIP >> 16) & 255}.${(intIP >> 8) & 255}.${intIP & 255}`;
|
|
};
|
|
|
|
const getRandomIP = () => {
|
|
const randIndex = getRandomInt(0, IP_RANGE.length);
|
|
const startIp = IP_RANGE[randIndex][0];
|
|
const endIp = IP_RANGE[randIndex][1];
|
|
const startIPInt = ipToInt(startIp);
|
|
const endIPInt = ipToInt(endIp);
|
|
const randomInt = getRandomInt(startIPInt, endIPInt);
|
|
const randomIP = intToIp(randomInt);
|
|
return randomIP;
|
|
};
|
|
|
|
async function goUrl(request, url) {
|
|
let fp = {
|
|
method: request.method
|
|
};
|
|
fp.headers = new Headers(request.headers);
|
|
for(var i = 2; i < arguments.length-1; i=i+2){
|
|
fp.headers[arguments[i]] = arguments[i+1];
|
|
}
|
|
return await fetch(url, fp);
|
|
}
|
|
|
|
export default {
|
|
/**
|
|
* fetch
|
|
* @param {Request} request
|
|
* @param {*} env
|
|
* @param {*} ctx
|
|
* @returns
|
|
*/
|
|
async fetch(request, env, ctx) {
|
|
const url = request.url;
|
|
let iSlash = url.indexOf('/',11);
|
|
let nUrl = url.substring(iSlash+1);
|
|
let iColon = nUrl.indexOf(':',3)+3;
|
|
if(!nUrl.startsWith('syndey.bing.com',iColon) &&
|
|
!nUrl.startsWith('www.bing.com/turing',iColon))
|
|
return await goUrl(request, nUrl);
|
|
const targetUrl = new URL(nUrl);
|
|
|
|
const newHeaders = new Headers();
|
|
request.headers.forEach((value, key) => {
|
|
// console.log(`old : ${key} : ${value}`);
|
|
if (KEEP_REQ_HEADERS.includes(key)) {
|
|
newHeaders.set(key, value);
|
|
}
|
|
});
|
|
newHeaders.set('host', targetUrl.host);
|
|
newHeaders.set('origin', targetUrl.origin);
|
|
newHeaders.set('referer', 'https://www.bing.com/search?q=Bing+AI');
|
|
const randIP = getRandomIP();
|
|
// console.log('randIP : ', randIP);
|
|
newHeaders.set('X-Forwarded-For', randIP);
|
|
const oldUA = request.headers.get('user-agent');
|
|
const isMobile = oldUA.includes('Mobile') || oldUA.includes('Android');
|
|
if (isMobile) {
|
|
newHeaders.set(
|
|
'user-agent',
|
|
'Mozilla/5.0 (iPhone; CPU iPhone OS 15_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.7 Mobile/15E148 Safari/605.1.15 BingSapphire/1.0.410427012'
|
|
);
|
|
} else {
|
|
newHeaders.set('user-agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.35');
|
|
}
|
|
|
|
// newHeaders.forEach((value, key) => console.log(`${key} : ${value}`));
|
|
const newReq = new Request(targetUrl, {
|
|
method: request.method,
|
|
headers: newHeaders,
|
|
body: request.body,
|
|
});
|
|
// console.log('request url : ', newReq.url);
|
|
const res = await fetch(newReq);
|
|
return res;
|
|
},
|
|
};
|