Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите разобратся с исходником Socks4 сервера. 
:(
    Опции темы
nod3264
Дата 21.10.2009, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 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 истекло.".


Настройки точно верные в браузере, так как с покупного сокса который мне дал товарищ для тестов всё грузится хорошо. 


В чём проблема?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0377 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.