refactor cf ip logic

This commit is contained in:
Emo-Damage
2023-06-03 19:25:00 +08:00
parent b2a01e1733
commit 870de893bc
2 changed files with 203 additions and 178 deletions

View File

@@ -2,45 +2,77 @@ import { connect } from 'cloudflare:sockets';
export default {
async fetch(request, env, ctx) {
console.log('start fetch');
const cloudflare = 'www.cloudflare.com';
const floodgap = 'gopher.floodgap.com';
let host = floodgap;
const isFloodgap = request.url.includes('floodgap');
const iscloudflare = request.url.includes('cloudflare');
if (isFloodgap) {
host = floodgap;
}
if (iscloudflare) {
host = cloudflare;
}
console.log('start fetch111');
const url = new URL(request.url);
const target = url.searchParams.get('target');
// if (!target) {
// return new Response('target is empty', {
// status: 500,
// });
// }
try {
const socket = connect(
{
hostname: host,
port: 443,
},
{
secureTransport: 'on',
}
);
console.log('start conneted', host);
const writer = socket.writable.getWriter();
const encoder = new TextEncoder();
const encoded = encoder.encode(
`GET / HTTP/1.1\r\nHost: ${host}\r\nUser-Agent: curl/8.0.1\r\nAccept: */*\r\n\r\n`
);
await writer.write(encoded);
console.log('write end');
return new Response(socket.readable, {
try {
/** @type {import("@cloudflare/workers-types").Socket}*/
const socket = connect(
{
hostname: target,
port: 443,
}
);
// socket.closed.then(() => {
// console.log('....socket.closed.then............');
// }).catch((e) => {
// console.log('.........socket.closed.error.............', e);
// }).finally(() => {
// console.log('.........socket.closed.finally.............');
// })
// console.log('---------------close-------');
// socket.readable.getReader().closed.then(() => {
// console.log('.........socket.readabl.....closed then.............');
// }).catch((e) => {
// console.log('....socket.readabl.....catch closing.............', e);
// })
await socket.writable.getWriter().write(new Uint8Array([1,2,3,4,5,6,7,8,9,10]))
// await delay(10)
} catch (e) {
console.log('connect error', e);
}
console.log('start conneted', target);
// const writer = socket.writable.getWriter();
// const encoder = new TextEncoder();
// const encoded = encoder.encode(
// `GET / HTTP/1.1\r\nHost: ${target}\r\nUser-Agent: curl/8.0.1\r\nAccept: */*\r\n\r\n`
// );
// await writer.write(encoded);
// // await writer.close();
// console.log('write end');
// await delay(1)
return new Response('yyyyyyyyyyyyyyyyyyyyyyyyyy', {
headers: { 'Content-Type': 'text/plain' },
status: 500,
});
} catch (error) {
console.log('Socket connection failed: ' + error);
return new Response('Socket connection failed: ' + error, {
status: 500,
});
}
},
};
};
function delay(timeout) {
return new Promise((resolve) => {
setTimeout(resolve, timeout);
});
}