HTTP代理穿透原理
HTTP代理服务器中能够提供一种HTTP CONNECT代理服务,能够允许用户建立TCP连接到任何端口。通过CONNECT方法穿透代理的实现方法为:
CONNECT代理服务器的代理端口(如:8080);如果成功返回就可以按照正常的Socket进行通讯。当然在此之前需要先获得代理相关的信息。
如何获取HTTP代理相关信息
程序中是通过读取注册表来获取计算机HTTP代理相关信息的,在注册表的\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings键值下就保存着HTTP代理服务器及端口等信息,
根据该键值下的ProxyEnable值可以判断是否有HTTP代理,没有代理的情况下ProxyEnable值为0。
当然一般情况下程序去中访问该键值可能是受限的,所有就需要获取到访问令牌不受限制的UserSid,使用该UserSid去读取HTTP代理信息。
通过HTTP代理代码片段
网络上摘一点代码,原理大概上能实现了的
memset(buff,0,sizeof(buff));
sprintf(buff,"CONNECT %s:%d HTTP/1.1\r\nAccept: */*\r\nContent-Type: text/html\r\nProxy-Connection: Keep-Alive\r\nContent-length: 0\r\n\r\n",lpszHost,nPort);
send(m_Socket,buff,strlen(buff),0);
........
memset(buff,0,sizeof(buff));
recv(m_Socket, buff, sizeof(buff), 0);
if(strstr(buff,"200 Connection")!=NULL)
return true;//连接成功
此外,如果是GET/POST代理你也可以模拟发post和get包,这个没什么说的,熟悉http协议就可以游刃有余的去编程了!主要是需要用大白鲨或其他http截包工具去分析调试。但是,对于客户服务端程序这样就需要额外添加一个中间跳板空间来中转数据。这本身又是很影响速度的。而post每次传输的数据还是有点经不起用。
HTTP代理服务器中能够提供一种HTTP CONNECT代理服务,能够允许用户建立TCP连接到任何端口。通过CONNECT方法穿透代理的实现方法为:
CONNECT代理服务器的代理端口(如:8080);如果成功返回就可以按照正常的Socket进行通讯。当然在此之前需要先获得代理相关的信息。
如何获取HTTP代理相关信息
程序中是通过读取注册表来获取计算机HTTP代理相关信息的,在注册表的\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings键值下就保存着HTTP代理服务器及端口等信息,
根据该键值下的ProxyEnable值可以判断是否有HTTP代理,没有代理的情况下ProxyEnable值为0。
当然一般情况下程序去中访问该键值可能是受限的,所有就需要获取到访问令牌不受限制的UserSid,使用该UserSid去读取HTTP代理信息。
通过HTTP代理代码片段
网络上摘一点代码,原理大概上能实现了的
memset(buff,0,sizeof(buff));
sprintf(buff,"CONNECT %s:%d HTTP/1.1\r\nAccept: */*\r\nContent-Type: text/html\r\nProxy-Connection: Keep-Alive\r\nContent-length: 0\r\n\r\n",lpszHost,nPort);
send(m_Socket,buff,strlen(buff),0);
........
memset(buff,0,sizeof(buff));
recv(m_Socket, buff, sizeof(buff), 0);
if(strstr(buff,"200 Connection")!=NULL)
return true;//连接成功
此外,如果是GET/POST代理你也可以模拟发post和get包,这个没什么说的,熟悉http协议就可以游刃有余的去编程了!主要是需要用大白鲨或其他http截包工具去分析调试。但是,对于客户服务端程序这样就需要额外添加一个中间跳板空间来中转数据。这本身又是很影响速度的。而post每次传输的数据还是有点经不起用。