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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Прокси 
:(
    Опции темы
BlackShon
Дата 2.9.2008, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 19.6.2008

Репутация: нет
Всего: нет



Здравствуйте, пишу прокси сервер. Столкнулся с проблемой. Вообще он предназначен для работы с icq  то есть через него идёт подключение и так далее. 
На прокси приходит запрос "CONNECT xxx:xxx HTTP/1.0", я конекчусь к серверу отсылаю запрос принемаю ответ и отсылаю программе, собственно на этом дело и заканчивается. В настройках я указал https прокси. 
 Может у ково есть готовый сервер или пример, но интересует имеено сам код.
PM MAIL   Вверх
BlackShon
Дата 2.9.2008, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 19.6.2008

Репутация: нет
Всего: нет



Не ужели никто не знает в чём дело?


Это сообщение отредактировал(а) BlackShon - 2.9.2008, 15:33
PM MAIL   Вверх
MetalFan
Дата 2.9.2008, 15:52 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 14
Всего: 128



не понятно, где вопрос? может "ково" ответит?


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
BlackShon
Дата 2.9.2008, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 19.6.2008

Репутация: нет
Всего: нет



Вопрос: как подключится к icq ? Я не пойму что тут сложного принял от клиента отдал серверу от сервера к клиенту, у меня это отражено, но когда  я принемаю ответ от сервера и отсылаю его программе, пишет связь прервана.
Здесь стоит задуматься, а как сервер должен ответить на "CONNECT xxx:xxx HTTP/1.0"? Он отвечает непонятными символами, которые программе не нравятся, может их расшифровывать нужно? Помогите кто сталкивался.
И вообще может кто нибудь лог сможет показать сессии?

Аська -> МойПрокси -> сервер (вот что нужно организовать)

ЗЫ. Брать готовый сервер не нужно. Иначе бы я не оброщался.
PM MAIL   Вверх
SneG0K
Дата 2.9.2008, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: 2
Всего: 54



BlackShon, дай ка лучше ты свой код.. А то если бы надо было расшифровывать, то QIP никогда бы не работал smile 
PM WWW Skype   Вверх
BlackShon
Дата 3.9.2008, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 19.6.2008

Репутация: нет
Всего: нет



Вот код потока:

Код


unit ClientThreadUnit;

interface

uses
  Classes, winsock, sysutils, windows;

type
  TClientThread = class(TThread)
  private

  protected
    procedure Execute; override;
  public
    iExtProxyPort:Integer;
    sExtProxyAddr:String;
    stClient:TSocket;
  end;

implementation

{ TClientThread }

function LookupName(name:String): TInAddr;
var
 HostEnt: PHostEnt;
 InAddr: TInAddr;
begin
 if name[4]='.' then
  InAddr.s_addr := inet_addr(PChar(name))
 else
  begin
  HostEnt := gethostbyname(PChar(name));
  FillChar(InAddr, SizeOf(InAddr), 0);
  if HostEnt <> nil then
   begin
    with InAddr, HostEnt^ do
     begin
      S_un_b.s_b1 := h_addr^[0];
      S_un_b.s_b2 := h_addr^[1];
      S_un_b.s_b3 := h_addr^[2];
      S_un_b.s_b4 := h_addr^[3];
     end;
   end
  end;
  Result := InAddr;
end;

procedure SendStr(s:TSocket; str:String);
var
 sRecvBuff : array [0..255] of char;
 TempStr : AnsiString;
begin
 TempStr:=str+#13+#10;
 CopyMemory(@sRecvBuff, PChar(TempStr), Length(TempStr));
 send(s, sRecvBuff, Length(TempStr), 0);
end;

procedure TClientThread.Execute;
var
 Buff: array [0..1024] of char;
 server_addr : sockaddr_in;
 sock_server : TSocket;
 iSize : Integer;
 rfds : TFDSET;
begin
 Fillchar(Buff, 1024, #0);

 Recv(stClient, Buff, 1024, 0);

 sock_server := socket(AF_INET, SOCK_STREAM, 0);

 server_addr.sin_addr.s_addr := htonl(INADDR_ANY);
 server_addr.sin_family := AF_INET;
 server_addr.sin_port := htons(443);                                    // здесь просто известно что будет в дальнейшем всё как надо будет.
 server_addr.sin_addr := LookupName('login.icq.com');

 if connect(sock_server, server_addr, sizeof(server_addr)) <> SOCKET_ERROR then
  begin

 send(sock_server, buff, strlen(buff),0);

 while true do
  begin
   FD_ZERO(rfds);
   FD_SET(stClient, rfds);
   FD_SET(sock_server, rfds);

   if (select(0, @rfds, nil, nil, nil) < 0) then
    exit;   
//от клиента серверу                                                                                
   if(FD_ISSET(stClient, rfds)) then
 begin
   iSize := recv(stClient, buff, sizeof(buff), 0);
      if iSize = -1 then break;
  Send(sock_server, buff, iSize, 0);
 continue;
end;
    FillChar(buff, 1024, #0);

//от  сервера клиенту  
                                                                        
   if(FD_ISSET(sock_server, rfds)) then
  begin
      iSize := recv(sock_server, buff, sizeof(buff), 0);
       if iSize = 0 then
       exit;
      Send(stClient, buff, length(buff), 0);
     continue;
end;
end;
end;
 CloseSocket(stClient);
 CloseSocket(sock_server);
end;

end.



PM MAIL   Вверх
SneG0K
Дата 4.9.2008, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: 2
Всего: 54



Вроде так навскидку код правильный. Попробуй на других программах (браузер например). Если с другими программами будет работать, то ты тогда не настраивай прокси в аське, а напиши допустим localhost вместо login.icq.com
PM WWW Skype   Вверх
RA
Дата 6.9.2008, 04:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

Репутация: 10
Всего: 115



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

Вот глянь готовый пример прокси сервера, Socks 4, при желании и в http переделать можно.

Это сообщение отредактировал(а) RA - 6.9.2008, 04:38

Присоединённый файл ( Кол-во скачиваний: 19 )
Присоединённый файл  Socks4Server.rar 4,53 Kb
PM   Вверх
BlackShon
Дата 6.9.2008, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 19.6.2008

Репутация: нет
Всего: нет



>>Вроде так навскидку код правильный.

Нет код не правельный как оказалось.

вот переделаный выделяю самое главное
Код

 if (connect(sock_server, server_addr, sizeof(server_addr)) = 0)  then
  begin

   buff  :=   'HTTP/1.0 200 Connection established'   + #13#10 +
                 'Proxy-agent: WinProxy/1.5.3'                 + #13#10 + #13#10;

   send(stClient, buff, strlen(buff),0);

 while (true) do
  begin

   FD_ZERO(rfds);
   FD_SET(stClient, rfds);
   FD_SET(sock_server, rfds);

   if (select(0, @rfds, nil, nil, nil) < 0) then
    exit;
                                                                               
   if(FD_ISSET(stClient, rfds)) then
  begin
   iSize := recv(stClient, buff, sizeof(buff), 0);
      if (iSize = 0) or (iSize = SOCKET_ERROR) then break;
Send(sock_server, buff, iSize, 0);
continue;
end;

if(FD_ISSET(sock_server, rfds)) then
begin
iSize := recv(sock_server, buff, sizeof(buff), 0);
if (iSize = 0) or (iSize = SOCKET_ERROR) then break;
 Send(stClient, buff, iSize , 0);
continue;
end;

  end;
end;



Сервер который поддерживает метод CONNECT. Как это происходит:
Сначала клиент шлёт запрос вида "CONNECT login.icq.com:443 HTTP/1.0...."
Я конектюсь к login.icq.com:443 и посылаю ответ клиенту:
 "HTTP/1.0 200 Connection established  
 Proxy-agent: WinProxy/1.5.3" 
всё дальше начинается тунелирование.

И вот такая же беда ... вот как только они перекинутся парой сообщений пишет связь разорвана. И всё перепробывал уже, не в какую. Скачал WinProxy там всё как по маслу работает. В вышеизложенным коде какаято наиглупейшая ошибка!                 
Я принемаю ответ и перенаправляю, ну что может быть проще?? Но не работает. Ну вот логически даже если думать, что может быть не так?
Есть мысли что каверкаются ответы клиента/сервера при пересылке. 
Прошу помощи. ошибка кроется в вышеуказаном коде.
Большое Спасибо.

ЗЫ Socks4 работает,спасибо, но переделывать уже времени нет...
 




Это сообщение отредактировал(а) BlackShon - 6.9.2008, 22:18
PM MAIL   Вверх
BlackShon
Дата 7.9.2008, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 19.6.2008

Репутация: нет
Всего: нет



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

Присоединённый файл ( Кол-во скачиваний: 12 )
Присоединённый файл  HTTPProxy.rar 173,04 Kb
PM MAIL   Вверх
RA
Дата 8.9.2008, 07:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

Репутация: 10
Всего: 115



http

Присоединённый файл ( Кол-во скачиваний: 30 )
Присоединённый файл  proxy.dpr 9,41 Kb
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

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

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

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

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

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


 




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


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

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