作者:IPIDEA
2022-09-27 14:06:43
很多人都在咨询代理IPIDEA客服时,会购买代理ip服务。然后,在这个协议下ip代理是怎么工作的?我们来看看具体的介绍。
http代理ip如何实现代理的使用?
浏览器和代理TCP握手后,开始了CONNECT请求,报文起点如下:
CONNECTimququ.com:443HTTP/1.1
对于CONNECT就请求而言,它只是用来创建代理TCP连接,只需提供服务器域名和端口,不需要具体的资源路径。收到此请求后,代理商需要与服务器建立联系TCP连接并响应浏览器HTTP报文:
HTTP/1.1200ConnectionEstablished
当浏览器收到响应报告时,可以认为是服务端TCP连接已经打开,后续直接到这个TCP连接协议数据。Wireshark的FollowTCPSteam该功能可以清楚地看到浏览器和代理之间的数据传输:
浏览器建立在服务端TCP连接产生的HTTP往返,完全是明文,这就是为什么CONNECT如果发送完整,请求只需提供域名和端口URL,Cookie等待信息,会被中间人一目了然,减少HTTPS的安全性。HTTP代理承载的HTTPS流量、应用数据等TLS握手成功后通过ApplicationData协议传输,中间节点无法知道用于流量加密master-secret,数据无法解密CONNECT暴露的域名和端口是普通的HTTPS就请求而言,中间人也可以得到它(IP和端口很容易获得,请求的域名可以通过DNSQuery或者TLSClientHello中的ServerNameIndication因此,这种方法并没有增加不安全性。
了解原理后再使用Node.js实现支持CONNECT代理也很简单。核心代码如下:
JSvarhttp=require(‘http’);
varnet=require(‘net’);
varurl=require(‘url’);
functionconnect(cReq,cSock){
varu=url.parse(‘http://’+cReq.url);
varpSock=net.connect(u.port,u.hostname,function(){
cSock.write(‘HTTP/1.1200ConnectionEstablished’);
pSock.pipe(cSock);
}).on(‘error’,function(e){
cSock.end();
});
cSock.pipe(pSock);
}
http.createServer().on(‘connect’,connect).listen(8888,‘0.0.0.0’);
上述代码运行后,将在当地8888端口打开HTTP代理服务,从CONNECT请求在报纸中分析域名和端口并创建到服务端TCP连接,并和CONNECT请求中的TCP连接起来,最后响应一个ConnectionEstablished响应。修改浏览器HTTP代理为127.0.0.1:8888后再访问HTTPS网站,代理可以正常工作。
除了http代理之外,IPIDEA还有socks代理,https代理,用户可以根据自己的工作要求或用途购买代理等服务。