mirror of https://github.com/torappinfo/uweb
use redirect for bingAI
parent
a2c2729725
commit
33d2db03b7
@ -1,29 +1,119 @@
|
||||
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;
|
||||
};
|
||||
|
||||
export default {
|
||||
async fetch(req, _env) {
|
||||
let url = req.url;
|
||||
let iSlash = url.indexOf('/',11);
|
||||
let nUrl = "https://www.bing.com/"+url.substring(iSlash+1);
|
||||
return goUrl(req, nUrl);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* fetch
|
||||
* @param {Request} request
|
||||
* @param {*} env
|
||||
* @param {*} ctx
|
||||
* @returns
|
||||
*/
|
||||
async fetch(request, env, ctx) {
|
||||
const currentUrl = new URL(request.url);
|
||||
const targetUrl = new URL(SYDNEY_ORIGIN + currentUrl.pathname + currentUrl.search);
|
||||
|
||||
function goUrl(request, url) {
|
||||
//构建 fetch 参数
|
||||
let fp = {
|
||||
method: request.method,
|
||||
headers: {}
|
||||
}
|
||||
//保留头部信息
|
||||
let reqHeaders = new Headers(request.headers);
|
||||
let dropHeaders = ["cookie","user-agent","accept","accept-language"];
|
||||
let he = reqHeaders.entries();
|
||||
for (let h of he) {
|
||||
let key = h[0],
|
||||
value = h[1];
|
||||
if (dropHeaders.includes(key)) {
|
||||
fp.headers[key] = value;
|
||||
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');
|
||||
}
|
||||
}
|
||||
return fetch(url, fp);
|
||||
}
|
||||
|
||||
// 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;
|
||||
},
|
||||
};
|
||||
|
@ -0,0 +1 @@
|
||||
{"clientTcpRtt":172,"longitude":"120.60200","latitude":"31.30930","tlsCipher":"AEAD-AES256-GCM-SHA384","continent":"AS","asn":4134,"clientAcceptEncoding":"br, gzip, deflate","country":"CN","tlsClientAuth":{"certIssuerDNLegacy":"","certIssuerSKI":"","certSubjectDNRFC2253":"","certSubjectDNLegacy":"","certFingerprintSHA256":"","certNotBefore":"","certSKI":"","certSerial":"","certIssuerDN":"","certVerified":"NONE","certNotAfter":"","certSubjectDN":"","certPresented":"0","certRevoked":"0","certIssuerSerial":"","certIssuerDNRFC2253":"","certFingerprintSHA1":""},"tlsExportedAuthenticator":{"clientFinished":"b7f5ebe4898f01fbdbf9b0a444e1edc7956472268f27576d15fe6e048855ae5fe9f514231998caf937773f6a53901960","clientHandshake":"44f40162794883f93892c883c4121ca289621ad38b27615555cc0f471283da68ad39a438b0e956abc6613792f5fb81de","serverHandshake":"d3ec250200a505c5bc98a049d3f63720e3baea922338e6f94d61a28d9dfed9c1078dc8fa74e83f6719938122e6887a85","serverFinished":"710a654a0cfdd69ce712c7464801d1661f5b797ddd3cccf7f78f4abbd34564ebb7e9c00282fe7923875226284bde9b67"},"tlsVersion":"TLSv1.3","city":"Suzhou","timezone":"Asia/Shanghai","colo":"SJC","region":"Jiangsu","requestPriority":"","botManagement":{"corporateProxy":false,"verifiedBot":false,"ja3Hash":"0cce74b0d9b7f8528fb2181588d23793","staticResource":false,"detectionIds":{},"score":2},"clientTrustScore":2,"httpProtocol":"HTTP/1.1","regionCode":"JS","asOrganization":"China Telecom","edgeRequestKeepAliveStatus":1}
|
@ -0,0 +1,134 @@
|
||||
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);
|
||||
if(!nUrl.startsWith(SYDNEY_ORIGIN))
|
||||
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;
|
||||
},
|
||||
};
|
Loading…
Reference in New Issue