浅谈http代理服务器的穿透

来源:互联网 发布:游唐网络副总裁巴美学 编辑:程序博客网 时间:2024/05/22 14:48
 思路就是先用套接字连接代理服务器,然后给代理服务器发送http请求,访问远程服务器

代码如下(只是连接):

//初使化服务器地址     
local.sin_family=AF_INET;     
local.sin_port=htons(8080);     
local.sin_addr.S_un.S_addr=inet_addr( "192.168.10.8");     //代理
  
m_socket=socket(AF_INET,SOCK_STREAM,0);     
int     ret;     
//联接代理服务器     
ret=connect(m_socket,(LPSOCKADDR)&local,sizeof(local));     
//有错的话     
if(ret!=0)     
{     
AfxMessageBox( "联接错误 ");     
                                                
closesocket(m_socket);     
return    ;// -1;     
}     
AfxMessageBox( "连接代理服务器成功 ");     
  
//用来和代理服务器交换信息的消息区     
char             buff[800];                         
//sprintf(             buff,             "%s%s:%d%s ", "CONNECT     ", "211.150.66.120 ",443, "     HTTP/1.1\r\nUser-Agent:             MyApp/0.1\r\n\r\n ");   
sprintf(buff,"CONNECT 211.150.66.120:5222 HTTP/1.0\r\nHost: 211.150.66.120\r\nContent-Length: 0\r\nProxy-Connection: Keep-Alive\r\nPragma: no-cache\r\n\r\n");          
  
send(m_socket,buff,strlen(buff),0);             //发送请求                         
  
memset(buff,0,800);                         
recv(m_socket,buff,800,0);                                                 //返回代理的response消息     
      
if(strstr(buff, "HTTP/1.0 200 ")==NULL)     
{                         
AfxMessageBox( "通过代理连接外网不成功! ");                         
closesocket(m_socket);                         
return    ;// 0;     
}                         
AfxMessageBox( "连接外网服务器成功! ");