Исходники прокси (Delphi)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by EST a1ien, 14 Jan 2007.

  1. EST a1ien

    EST a1ien Elder - Старейшина

    Joined:
    2 Apr 2006
    Messages:
    249
    Likes Received:
    48
    Reputations:
    16
    Народ неукого нету простого проксика на Delphi в исходниках очень надо.
     
  2. Dagon

    Dagon Elder - Старейшина

    Joined:
    27 Mar 2006
    Messages:
    57
    Likes Received:
    24
    Reputations:
    8
    _http://17slon.com/gp/gp/files/gphttpproxydemo.zip
     
    2 people like this.
  3. EST a1ien

    EST a1ien Elder - Старейшина

    Joined:
    2 Apr 2006
    Messages:
    249
    Likes Received:
    48
    Reputations:
    16
    Нее мне не http проксик нужен а желательно на socket'ах
     
  4. mR_LiNK[deface_0nl

    mR_LiNK[deface_0nl Elder - Старейшина

    Joined:
    12 Dec 2006
    Messages:
    147
    Likes Received:
    27
    Reputations:
    13
    -юзай инди компоненты
    -посмотри здесь http://forum.mazafaka.ru/archive/f-18.html
    http://www.dinform.ru/kuban/htmls/public_htmls/2-4.shtml



    зачем так заморачиваться когда обычные прокси есть уже неплохие готовые, а анонимные на удаленном серве напиши на пхп..
     
    #4 mR_LiNK[deface_0nl, 14 Jan 2007
    Last edited: 14 Jan 2007
  5. EST a1ien

    EST a1ien Elder - Старейшина

    Joined:
    2 Apr 2006
    Messages:
    249
    Likes Received:
    48
    Reputations:
    16
    Понимаеш мне надо в одну прогу встроить проксик чтобы вмешатся в пакеты в этой проги передаваемые на сервер.
     
  6. dexus

    dexus New Member

    Joined:
    6 Jan 2007
    Messages:
    6
    Likes Received:
    2
    Reputations:
    0
    на сях знаю 1 простой кроссплатформенный носок
    может пригодится ? )))

    Satanic Socks Server v0.66.170506
    Powered by drmist\STNC

    исходник тута

    http://webfile.ru/1249119
     
  7. ZaCo

    ZaCo Banned

    Joined:
    20 Jun 2005
    Messages:
    737
    Likes Received:
    336
    Reputations:
    215
    если человек ищет исходник прокси-сервера на делфи, то я думаю ему не стоит смотреть на исходник сокс-сервера на си.
     
    1 person likes this.
  8. _Great_

    _Great_ Elder - Старейшина

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,119
    Reputations:
    1,139
    ZaCo, просто тут некоторые хотят казаться умнее)))
     
  9. LEE_ROY

    LEE_ROY Elder - Старейшина

    Joined:
    9 Nov 2006
    Messages:
    450
    Likes Received:
    188
    Reputations:
    26
    за $ напишу на делфе..
     
  10. _Great_

    _Great_ Elder - Старейшина

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,119
    Reputations:
    1,139
    за $ я и на асме напишу с подробными комментариями :p
     
    1 person likes this.
  11. Joker-jar

    Joker-jar Elder - Старейшина

    Joined:
    11 Mar 2007
    Messages:
    581
    Likes Received:
    205
    Reputations:
    37
    Помогите отыскать сорцы простого http прокси, реализованного на WinSock. Или документацию о протоколе прокси, сам напишу...
     
  12. zl0y

    zl0y Banned

    Joined:
    13 Sep 2006
    Messages:
    371
    Likes Received:
    270
    Reputations:
    109
    Не забивай форум тупыми мессагами =\
    Вот,самый простой http://slil.ru/24247196 :) Зыыыы Плюсеги мне )) :)
     
    1 person likes this.
  13. Joker-jar

    Joker-jar Elder - Старейшина

    Joined:
    11 Mar 2007
    Messages:
    581
    Likes Received:
    205
    Reputations:
    37
    zl0y, премного благодарен. Все же хотелось бы где то почитать о работе прокси, самому интересно
     
  14. KEZ

    KEZ Ненасытный школьник

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    ну почитай

    берешь слушаешь какой-нибудь порт, получаешь туда коннект и http-запрос читаешь
    берешь поле Host: из него и резольвишь айпи. коннектишься туда.
    передаешь весь запрос как он был. получаешь ответ и передаешь его обратно.
    только при получение коонекта надо создавать отдельный поток, который будет обслужить клиентский запрос.

    сокс - получаешь запрос в виде структуры - там команда, адрес и данные
    все это описано, как ни странно =\
    коннектишься, передаешь
     
  15. _Great_

    _Great_ Elder - Старейшина

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,119
    Reputations:
    1,139
    Что самое странное, описание ВСЕХ протоколов есть в RFC. Народ ленится читать?
     
  16. Joker-jar

    Joker-jar Elder - Старейшина

    Joined:
    11 Mar 2007
    Messages:
    581
    Likes Received:
    205
    Reputations:
    37
    Не, не ленюсь. Просил лишь помочь - подсказать хде эт найти.
     
  17. Joker-jar

    Joker-jar Elder - Старейшина

    Joined:
    11 Mar 2007
    Messages:
    581
    Likes Received:
    205
    Reputations:
    37
    zl0y, а есть такой же, консольный, но тока сокс?
     
  18. _Great_

    _Great_ Elder - Старейшина

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,119
    Reputations:
    1,139
    сложно переписать да?
     
  19. Joker-jar

    Joker-jar Elder - Старейшина

    Joined:
    11 Mar 2007
    Messages:
    581
    Likes Received:
    205
    Reputations:
    37
    Пишу курсовик по сетям, неохота переключаться на другой код. Думал, мож есть у кого-нибудь велосипед...

    З.Ы. Ладно, будет время, перепишу и выложу.
     
  20. А®ТеS

    А®ТеS Active Member

    Joined:
    25 Nov 2006
    Messages:
    198
    Likes Received:
    193
    Reputations:
    41
    Вот те на делфях исходники сокс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.
    
     
    1 person likes this.