Прокси туннелирование C++

Прокси серверы – это компьютеры с установленным специализированным программным обеспечением, служащие для обработки разнообразных запросов со стороны клиента. Основными типами прокси серверов служат: шлюзы, анонимные прокси и файрволы. В данном примере показано как через HTTP прокси получить тестовую html страницу.

#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <windows.h>
 
#pragma comment(lib, "ws2_32.lib")
 
int main()
{
 
        WSADATA wsaData;
        if(!WSAStartup(0x0202,&wsaData))
        {
                cout<<"WSAStartup is ok"<<endl;
                SOCKET s_kproxy = socket(AF_INET,SOCK_STREAM,0);
                if(s_kproxy != SOCKET_ERROR)
                {
                        sockaddr_in proxy;
                        proxy.sin_family      = AF_INET;
                        proxy.sin_port        = htons(80);
                        proxy.sin_addr.s_addr = inet_addr("64.236.20.71");
                        if(connect(s_kproxy,(PSOCKADDR)&proxy,sizeof(proxy)) != SOCKET_ERROR)
                        {
                                cout<<"connect..."<<endl;
                                char szBuffer[10240];
                                sprintf(szBuffer,
                                "CONNECT %s:%d HTTP/1.0\r\nUser-Agent: Test\r\n\r\n","www.code.hut1.ru",80);
                                
                                if(send(s_kproxy,szBuffer,strlen(szBuffer),0))
                                {
                                        cout<<"Send - status ok"<<endl;
                                        memset(szBuffer,0,sizeof(szBuffer));
                                        
                                        if(recv(s_kproxy,szBuffer,10240,0))
                                        {
                                                cout<<"Buffer: "<<szBuffer<<endl;
                                                ZeroMemory(szBuffer,sizeof(szBuffer));
                                                lstrcpy(szBuffer,"GET /test.htm HTTP/1.0\r\n");
                                                lstrcat(szBuffer,"Host: www.code.hut1.ru\r\n");
                                                lstrcat(szBuffer,"User-Agent: Test\r\n\r\n");
                                                if(send(s_kproxy,szBuffer,strlen(szBuffer),0))
                                                {
                                                        cout<<"Send GET - status ok"<<endl;
                                                        ZeroMemory(szBuffer,sizeof(szBuffer));
                                                        if(recv(s_kproxy,szBuffer,10240,0))
                                                        {
                                                                cout<<"HTML: "<<endl<<szBuffer<<endl;
 
                                                        }else{cout<<"ERROR: recv 2"<<endl;}
                                                }else{cout<<"ERROR: send GET"<<endl;}
                                        }else{cout<<"ERROR: recv"<<endl;}
                                }else{cout<<"ERROR: send"<<endl;}
                        }else{cout<<"ERROR: connect"<<endl;}
                        
                        closesocket(s_kproxy);
                        
                }else{cout<<"ERROR: socket"<<endl;}
                
                if(!WSACleanup())
                {cout<<"WSACleanup is ok"<<endl;}
                else{cout<<"ERROR: WSACleanup"<<endl;}
                
        }else{cout<<"ERROR: WSAStartup"<<endl;}
        cout<<"Press any key to exit"<<endl;
        while(!getch());
        return 0;
}

Прокси туннелирование C++