使用node实现代理的问题
我在使用node实现两级代理,结构是客户端-本地代理-远程代理-终端,想让客户端和终端直接建立隧道。本地代理建立http服务器,拦截到CONNECT请求时,和远程代理建立tcp连接,远程代理和终端建立tcp连接,本地代理再返回HTTP/1.1 200 Connection Established。现在报SSL_ERROR_RX_RECORD_TOO_LONG 这个错误,麻烦大佬们帮我看一下哪里弄错了,实在没有思路,谢谢了。 本地代理处理CONNECT请求,
//监听CONNECT方法
server.on('connect', (req, clientSocket, head) => {
const {port, hostname} = url.parse(`//${req.url}`);
serverSocket.on('connect', () => {
serverSocket.write(port + "#" + hostname);
});
//与远程代理端建立连接
const serverSocket = net.connect(8989, "0.0.0.0");
//当远程代理端与终端建立连接后,返回HTTP/1.1 200 Connection Established
serverSocket.on("data",(e)=>{
if (e.toString() === "ok") {
clientSocket.write(['HTTP/1.1 200 Connection Established'].join('\r\n'));
clientSocket.write('\r\n\r\n');
serverSocket.pipe(clientSocket);
clientSocket.pipe(serverSocket)
}
})
})
远程代理端连接目标网站:
const net = require("net");
const server = net.createServer((client)=>{
client.on("data",(data)=>{
let option = data.toString();
net.createConnection(80,option.slice(option.indexOf("#")+1),()=>{
client.write("ok")
})
})
});
server.listen(8989);
这是firefox和chrome的报错图: