Шустрый

Профиль
Группа: Участник
Сообщений: 68
Регистрация: 2.8.2009
Репутация: нет Всего: 1
|
Нашол исходники socks 4 сервера. | Код |
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,si zeof(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.
|
Сохранил этот код в файду socks4.dpr Запустил, скомпилировал. Закинул прогу на деда, запустил. Пытаюсь зайти через него на 2ip.ru или google.com но ничего не выходит, браузер ругается "Время ожидания ответа от сервера 2ip.ru истекло.". Настройки точно верные в браузере, так как с покупного сокса который мне дал товарищ для тестов всё грузится хорошо. В чём проблема?
|