Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Исходники прокси (Delphi) (https://forum.antichat.xyz/showthread.php?t=31284)

EST a1ien 14.01.2007 15:08

Исходники прокси (Delphi)
 
Народ неукого нету простого проксика на Delphi в исходниках очень надо.

Dagon 14.01.2007 15:26

_http://17slon.com/gp/gp/files/gphttpproxydemo.zip

EST a1ien 14.01.2007 15:36

Нее мне не http проксик нужен а желательно на socket'ах

mR_LiNK[deface_0nl 14.01.2007 15:39

Цитата:

Сообщение от EST a1ien
Народ неукого нету простого проксика на Delphi в исходниках очень надо.

-юзай инди компоненты
-посмотри здесь http://forum.mazafaka.ru/archive/f-18.html
http://www.dinform.ru/kuban/htmls/public_htmls/2-4.shtml



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

EST a1ien 14.01.2007 22:31

Цитата:

Сообщение от mR_LiNK[deface_0nl
зачем так заморачиваться когда обычные прокси есть уже неплохие готовые, а анонимные на удаленном серве напиши на пхп

Понимаеш мне надо в одну прогу встроить проксик чтобы вмешатся в пакеты в этой проги передаваемые на сервер.

dexus 15.01.2007 01:14

на сях знаю 1 простой кроссплатформенный носок
может пригодится ? )))

Satanic Socks Server v0.66.170506
Powered by drmist\STNC

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

http://webfile.ru/1249119

ZaCo 15.01.2007 01:32

если человек ищет исходник прокси-сервера на делфи, то я думаю ему не стоит смотреть на исходник сокс-сервера на си.

_Great_ 15.01.2007 10:24

ZaCo, просто тут некоторые хотят казаться умнее)))

LEE_ROY 03.02.2007 02:49

за $ напишу на делфе..

_Great_ 03.02.2007 11:02

за $ я и на асме напишу с подробными комментариями :p

Joker-jar 17.04.2007 07:27

Помогите отыскать сорцы простого http прокси, реализованного на WinSock. Или документацию о протоколе прокси, сам напишу...

zl0y 17.04.2007 08:19

Цитата:

LEE_ROY
Не забивай форум тупыми мессагами =\
Цитата:

EST a1ien
Вот,самый простой http://slil.ru/24247196 :) Зыыыы Плюсеги мне )) :)

Joker-jar 17.04.2007 12:11

zl0y, премного благодарен. Все же хотелось бы где то почитать о работе прокси, самому интересно

KEZ 17.04.2007 19:17

ну почитай

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

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

_Great_ 18.04.2007 09:23

Цитата:

Сообщение от KEZ
ну почитай

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

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

Что самое странное, описание ВСЕХ протоколов есть в RFC. Народ ленится читать?

Joker-jar 24.04.2007 03:29

Не, не ленюсь. Просил лишь помочь - подсказать хде эт найти.

Joker-jar 28.04.2007 18:28

zl0y, а есть такой же, консольный, но тока сокс?

_Great_ 28.04.2007 18:40

сложно переписать да?

Joker-jar 30.04.2007 06:13

Пишу курсовик по сетям, неохота переключаться на другой код. Думал, мож есть у кого-нибудь велосипед...

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

А®ТеS 30.04.2007 14:06

Цитата:

Сообщение от Joker-jar
zl0y, а есть такой же, консольный, но тока сокс?

Вот те на делфях исходники сокс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,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.



Время: 14:56