socks2-server / index.ts
x-undefined-2's picture
Update index.ts
cbf2e63 verified
import { connect } from 'cloudflare:sockets';
const passwd = "iamissupperman"
export default{
async fetch(request, env){
let params = new URL(request.url).searchParams;
const token=params.get("token");
const upgradeHeader=request.headers.get("Upgrade");
if(passwd!=token) return new Response(null, {status:401});
if(upgradeHeader!=="websocket"){
return new Response("<html lang='zh_CN'><head><meta charset='utf-8'></meta></head><body><h1>可以<a href='./cli.js'>连接</a>了</h1><body></html>",
{
status:200,
headers:{
"Content-Type":"text/html"
}
});
}
const [hostname, port] = params.get("proxy").split(":");
const socket=connect({hostname, port:parseInt(port)});
const [client, server]=Object.values(new WebSocketPair());
try{
server.accept();
new ReadableStream({
start(controller){
server.onmessage = ({data})=>controller.enqueue(data);
server.onerror = e=>controller.error(e);
server.onclose = e=>controller.close(e);
},
cancel(reason){server.close();}
}).pipeTo(socket.writable);
socket.readable.pipeTo(new WritableStream({
start(controller){server.onerror=e=>controller.error(e);},
write(chunk){server.send(chunk);}
}));
} catch(e) {
server.close();
return new Response(e, {status:400});
}
return new Response(null, {status:101, webSocket:client});
}
}