-юзай инди компоненты -посмотри здесь http://forum.mazafaka.ru/archive/f-18.html http://www.dinform.ru/kuban/htmls/public_htmls/2-4.shtml зачем так заморачиваться когда обычные прокси есть уже неплохие готовые, а анонимные на удаленном серве напиши на пхп..
Понимаеш мне надо в одну прогу встроить проксик чтобы вмешатся в пакеты в этой проги передаваемые на сервер.
на сях знаю 1 простой кроссплатформенный носок может пригодится ? ))) Satanic Socks Server v0.66.170506 Powered by drmist\STNC исходник тута http://webfile.ru/1249119
если человек ищет исходник прокси-сервера на делфи, то я думаю ему не стоит смотреть на исходник сокс-сервера на си.
Помогите отыскать сорцы простого http прокси, реализованного на WinSock. Или документацию о протоколе прокси, сам напишу...
ну почитай берешь слушаешь какой-нибудь порт, получаешь туда коннект и http-запрос читаешь берешь поле Host: из него и резольвишь айпи. коннектишься туда. передаешь весь запрос как он был. получаешь ответ и передаешь его обратно. только при получение коонекта надо создавать отдельный поток, который будет обслужить клиентский запрос. сокс - получаешь запрос в виде структуры - там команда, адрес и данные все это описано, как ни странно =\ коннектишься, передаешь
Пишу курсовик по сетям, неохота переключаться на другой код. Думал, мож есть у кого-нибудь велосипед... З.Ы. Ладно, будет время, перепишу и выложу.
Вот те на делфях исходники сокс4. Нашел в нете, на работоспособность не тестил: Code: program dproxy; uses windows, WinSock; type TSOCKS4_REQUEST=record ucVersion : byte; ucCommand : byte; wDestPort : word; dwDestIp : dword; end; var wsaData : TWSADATA; sport : string; iport : word; l_sock : TSocket; sock4 : SOCKADDR_IN; Client : TSockAddr; Size : integer; h1 : THandle; procedure FlushRecvBufferUntil(s:TSOCKET;condition:Char); var iReceiveRes : integer; cDummy : char; begin repeat iReceiveRes := recv(s, cDummy, sizeof(cDummy), 0); until NOT ((iReceiveRes<>SOCKET_ERROR) and (iReceiveRes<>0) and (cDummy<>condition)); end; procedure SocksHandlerTreadProc(pParam:pointer); stdcall; var s : TSocket; tunnelSock : TSocket; iConnectResult : integer; iReceiveRes : integer; iSocketsSet : integer; socks4Request : TSOCKS4_REQUEST; socks4Response : TSOCKS4_REQUEST; remoteAddr : SOCKADDR_IN; fds_read : TFDset;//fd_set; tv : TTimeval; cSocksVersion : byte; iSelectResult : integer; loop : integer; ulVal : u_long; swapBuffer : array[0..4096*16-1] of char; iRecvResult : integer; begin s := TSOCKET(pParam); tunnelSock := 0; loop := 0; while loop=0 do begin inc(loop); iConnectResult := 0; iReceiveRes := 0; iSocketsSet := 0; FD_ZERO(fds_read); FD_SET(s, fds_read); tv.tv_sec := 30; cSocksVersion := 0; iSelectResult := select(0, @fds_read, nil, nil, @tv); if (iSelectResult=SOCKET_ERROR) or (not iSelectResult>0) then break; ulVal := 0; ioctlsocket(s, FIONBIO , ulVal); iReceiveRes := recv(s, cSocksVersion, 1, MSG_PEEK); if cSocksVersion=4 then // 3333333333333333333 begin iReceiveRes := recv(s, socks4Request, sizeof(socks4Request), 0); if iReceiveRes=SOCKET_ERROR then break; ulVal := 1; ioctlsocket(s, FIONBIO , ulVal); FlushRecvBufferUntil(s, #0); if socks4Request.ucCommand = 1 then begin // 2222222222222222222 ulVal := 0; ioctlsocket(s, FIONBIO, ulVal); remoteAddr.sin_family := AF_INET; move(socks4Request.dwDestIp,remoteAddr.sin_addr,sizeof(remoteAddr.sin_addr)); remoteAddr.sin_port := socks4Request.wDestPort; tunnelSock := socket(AF_INET, SOCK_STREAM, 0); iConnectResult := connect(tunnelSock, remoteAddr, sizeof(remoteAddr)); if (iConnectResult<>SOCKET_ERROR) then begin // 1111111111 socks4Response.ucCommand := 90; socks4Response.ucVersion := 0; send(s, socks4Response, sizeof(socks4Response), 0); end else break; // 1111111111 end else break;// 2222222222222222222 end else break;// 3333333333333333333 ulVal := 0; ioctlsocket(tunnelSock, FIONBIO, ulVal); ioctlsocket(s, FIONBIO, ulVal); fillchar(swapBuffer,sizeof(swapBuffer),0); tv.tv_sec := 2; while true do // 4444444444444444 begin FD_ZERO(fds_read); FD_SET(s, fds_read); FD_SET(tunnelSock, fds_read); iSocketsSet := select(0, @fds_read, nil, nil, @tv); //if (iSocketsSet == SOCKET_ERROR) _leave; if iSocketsSet > 0 then // 5555555555555555 begin if FD_ISSET(s, fds_read) then begin iRecvResult := recv(s, swapBuffer, sizeof(swapBuffer), MSG_PEEK); if (iRecvResult=0) then break else iRecvResult := recv(s, swapBuffer, sizeof(swapBuffer), 0); if (iRecvResult <> SOCKET_ERROR) and (iRecvResult > 0) then send(tunnelSock, swapBuffer, iRecvResult, 0) else BREAK; end; if (FD_ISSET(tunnelSock, fds_read)) then begin iRecvResult := recv(tunnelSock, swapBuffer, sizeof(swapBuffer), MSG_PEEK); if iRecvResult = 0 then break else iRecvResult := recv(tunnelSock, swapBuffer, sizeof(swapBuffer), 0); if (iRecvResult <> SOCKET_ERROR) and (iRecvResult > 0) then send(s, swapBuffer, iRecvResult, 0) else break; end; end; // 5555555555555555 end; // 4444444444444444 end; // while loop=0 do closesocket(s); closesocket(tunnelSock); end; begin WSAStartup(MAKEWORD(2,0), wsaData); l_sock := socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); sock4.sin_family := AF_INET; sock4.sin_port := htons(1080); sock4.sin_addr.s_addr := INADDR_ANY; Size := SizeOf(Client); if (Bind(l_sock,sock4,SizeOf(sock4))=0) and (Listen(l_sock,$FF)=0) then while true do CreateThread(nil,0,@SocksHandlerTreadProc,Pointer(accept(l_sock, @Client, @Size)),0,h1); end.