使用node实现代理的问题
发布于 5 年前 作者 hushiyun2019 3271 次浏览 来自 问答

我在使用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的报错图: 1.png2.png

回到顶部