не ) муторные очень , хочется скопипастить и ваще не вникать ) самому написать не предлагать , хочу поддержать традицию "потратить 3 часа на поиски, а потом забить и написать самому за час )"
Дак таким "макаром" ты же и получишь что-то типа ... http://www.imagepost.ru/images/826/812a8652610fa552df2d8f30038.jpg Оно такое надо?
http://www.codeguru.com/cpp/i-n/internet/http/article.php/c3383 http://www.codeproject.com/KB/IP/howtoproxy.aspx
Сегодня закончил писать прокси-сервер, вроде работает(в локалке) в инете не пробовал. Одно плохо не работает Https, хотелось бы доработать: Код (Text): #include <winsock2.h> #include <windows.h> #include <iostream.h> #include <process.h> #include <stdio.h> #include <string.h> int Recv(int unsigned clientsocket, char *recvbuf, int size, int time) { timeval tm = {0, time}; fd_set fd; FD_ZERO(&fd); FD_SET(clientsocket, &fd); int rc = select(0, &fd, NULL, NULL, &tm); if(rc == SOCKET_ERROR) { GetLastError(); return -1; } if(rc) return recv(clientsocket, recvbuf, size, 0); } UINT WINAPI thread_client(LPVOID clientsocket) { char recvbuf, totalbuf[500000], addrbuf[128]; int i = 0, y = 0, c = -1; SOCKET sock; struct hostent *ht; struct sockaddr_in sin; struct in_addr sinc; int strl; sock = WSASocketA(2,1,0,0,0,0); while(1) { ZeroMemory(totalbuf, sizeof(totalbuf)); c = Recv((SOCKET)clientsocket, totalbuf, sizeof(totalbuf), 1000000); if(c <= 0) break; ZeroMemory(addrbuf, sizeof(addrbuf)); y = 0; for(int u = 0; u < 1024; u++) { if(totalbuf[u] == 'H' && totalbuf[u+1] == 'o' && totalbuf[u+2] == 's') { while(totalbuf[u+6] != '\r') { addrbuf[y] = totalbuf[u+6]; ++y; ++u; } break; } } ZeroMemory(&ht, sizeof(ht)); ht = gethostbyname(addrbuf); i = 0; while (ht->h_addr_list[i] != 0) sinc.s_addr = *(u_long *)ht->h_addr_list[i++]; ZeroMemory(&sin, sizeof(sin)); sin.sin_family = AF_INET; sin.sin_addr.s_addr = sinc.s_addr; sin.sin_port = htons(80); c = connect(sock, (struct sockaddr *)&sin, sizeof(sin)); if(c < 0) break; c = send(sock, totalbuf, strlen(totalbuf), 0); ZeroMemory(totalbuf, sizeof(totalbuf)); y = 0; while(Recv(sock, &recvbuf, sizeof(recvbuf), 1000000)) { totalbuf[y] = recvbuf; ++y; } closesocket(sock); c = send((SOCKET)clientsocket, totalbuf, y, 0); } closesocket(sock); closesocket((SOCKET)clientsocket); return 0; } int main(void) { WSADATA wsd; UINT IDThread; SOCKET servsocket, clientsocket; int c; HANDLE hThread; WSAStartup(0x201, &wsd); struct sockaddr_in ser, cli; servsocket = WSASocketA(2,1,0,0,0,0); ser.sin_family = AF_INET; ser.sin_addr.s_addr = INADDR_ANY; ser.sin_port = htons(1111); c = bind(servsocket, (struct sockaddr *)&ser, sizeof(ser)); c = listen(servsocket, 5); int size_of_cli = sizeof(cli); while(1) { clientsocket = accept(servsocket, (struct sockaddr *)&cli, &size_of_cli); if(clientsocket > 0) { hThread = (HANDLE)_beginthreadex( NULL, 0, thread_client, (LPVOID)clientsocket, NULL, &IDThread); } Sleep(1000); } return 0; } MSVC++ 6.0 P.S. Сервер вешается на 1111 порт.