123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- 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;
- },
- };
|