Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2006.10.08;
Скачать: [xml.tar.bz2];

Вниз

icq и цепочка прокси   Найти похожие ветки 

 
w!zard ©   (2006-05-14 00:13) [0]

Я пишу свой icq client и хочу сделать такую функцию подключения к icq серверу через цепочку прокси.
Помогите плиз.


 
Delphi5.01 ©   (2006-05-14 10:17) [1]

Мои соображение по данному вопросу

Для начала думаю стоит разобраться как пользоваться одним прокси. Если вы этот этап уже прошли то вам нужно перейти на решение более сложной задачи. Как организовать передачу данных через несколько прокси (не обязательно ICQ), как я представляю для этого надо как то сообщить прокси что ваш пакет должен следовать через определенный компьютер (IP:PORT), в нашем случае прокси.

Я точно не могу утверждать, но обыкновенные прокси не поддерживают такой протокол. Хотя возможно есть вариант для обхода. Вот если у вас есть 10 выделенных серверов то замутить такое намного легче. Если на каждом сервере есть например PHP то можно ваш пакет передавать от одного сервера другому, с серверной стороны ваш скрипт будет обрабатывать ваши запросы

Типа вам продеться писать что-то вроде своего протокола.

Надежность высокая и работа способность. Кстати на последок можно будет замутить такое что бы при передаче данных между скриптами site1.com/send.php к site2.com/reacieve.php можно использовать прокси, таким образом в логах второго сервера IP вашего первого сервера даже не буден виден. Ну и так далее между каждыми передачами.

Возможно я изобретаю велосипед, но это то что мне приходит в голову с вашей цепочкой.

Желаю удачи


 
Slym ©   (2006-05-15 06:00) [2]

Delphi5.01 ©   (14.05.06 10:17) [1]
Типа вам продеться писать что-то вроде своего протокола.

протокол уже есть и поддерживает мульти проксирование
команда CONNECT

принцип:
1. конектимся к 1 прокси как обычно
2. While n<10 do
3. Команда CONNECT адрес:порт N прокси
  inc(n)
4. Команда GET www.icq.com


 
MaN|Ac   (2006-05-15 06:57) [3]

помойму это не нужно в принципе
если представить что локальный прокси доступен пользоваттелям без авторизации
а все остальные прокси взяимодействуют друг с другом как parent с авторизацией
то просто на просто твоя программа соединится с первым а дальше не куда не пойдет.
К тому же если в сети интернет через цепочку проксей то за тебя уже все настроил администратор
все что нужно это соединится со своим прокси сервером.


 
Delphi5.01 ©   (2006-05-15 10:19) [4]


> Slym ©   (15.05.06 06:00) [2]
>
> Delphi5.01 ©   (14.05.06 10:17) [1]
> Типа вам продеться писать что-то вроде своего протокола.
>
> протокол уже есть и поддерживает мульти проксирование
> команда CONNECT

Не думаю, как именно первый прокси должен понять что конект будет проходить через определенный прокси? Или если такое возможно то надо с конца идти, типа пакет для последнего прокси засунуть в пакет для предпоследнего и т.д. и только в этом случае дойда до первого уровна, все прокси разберуться что делать, но вот как это замутить даже представления не имею :-)


 
w!zard ©   (2006-05-15 14:58) [5]

А какими компонентами пользоваться? TClientSocket подойдет??


 
Delphi5.01 ©   (2006-05-15 15:03) [6]

Надо пользоваться тем компонентом который поддерживает выше указанный протокол. К сожалению я о таком протоколе не слышал, но опираясь на слова

> Slym ©

должен подойти любой компонент поддерживающий TCP/IP протокол


 
w!zard ©   (2006-05-15 18:29) [7]

Slym, объясни пожалуйста по подробней.


 
Delphi5.01 ©   (2006-05-15 19:37) [8]


> w!zard ©   (15.05.06 18:29) [7]
>
> Slym, объясни пожалуйста по подробней.
>

Пока Slym появиться посоветую вам пробить в google-е поиск по ключевым словам proxy connect или proxy chain или еще что может найдете похожие вопросы :-) Мне часто помогало


 
w!zard ©   (2006-05-15 20:24) [9]

да пробывал уже :) я то сам процесс работы цепочки понимаю, а вот как это реализовать не делфи не знаю. даже скачал несколько исходников но чет я в них не разобрался


 
seeker ©   (2006-05-16 09:57) [10]


> а вот как это реализовать не делфи не знаю.

Реализация процесса - личное дело каждого...
Можно, например, так...

procedure TForm1.ClientSocket1Connect(Sender: TObject;
 Socket: TCustomWinSocket);
begin
Connect(Socket);
end;

procedure TForm1.ClientSocket1Read(Sender: TObject;
 Socket: TCustomWinSocket);
begin
Buff:=Socket.ReceiveText;
 if not ServerConnected then
   begin
        if (pos(#13#10#13#10,Buff) > 0) then
           if (pos("HTTP/1.0 200",Buff) > 0) or
              (pos("HTTP/1.1 200",Buff) > 0) or
              (pos("HTTPS/1.0 200",Buff) > 0) or
              (pos("HTTPS/1.1 200",Buff) > 0)then
             begin
               if not ServerConnect then
                 begin
                   Connect(Socket);
                   Exit;
                 end
               else
                 begin
                   Delete(Buff,1,pos(#13#10#13#10,Buff)+3);
                   ServerConnected:=true;
                 end;
             end
   end;
//тут, по идее должны быть пакеты от login.icq.com
end;

procedure TForm1.Connect(Socket: TCustomWinSocket);
begin
Buff:="";
if Listproxy.Count > 0 then
 begin
   if Socket=nil then
     begin
       ClientSocket1.Host:=Listproxy.Names[0];
       ClientSocket1.Port:=StrToInt(Listproxy.ValueFromIndex[0]) ;
       ClientSocket1.Open;
       Listproxy.Delete(0);
       Exit;
     end;
   Socket.SendText("CONNECT "+Listproxy.Strings[0]+" HTTP/1.0"+#13#10+
                  "User-agent: Mozilla (Mozilla 1.24b; Windows; I; 32-bit)"+#13#10#13#10);
   Listproxy.Delete(0);
 end
else
 begin
   ServerConnect:=True;
   Socket.SendText("CONNECT "+"login.icq.com:5190"+" HTTP/1.0"+#13#10+
                  "User-agent: Mozilla (Mozilla 1.24b; Windows; I; 32-bit)"+#13#10#13#10);
 end
end;


 
Slym ©   (2006-05-16 15:18) [11]

function GetResponseCode(const Response:string): Integer;
var S: string;
begin
 S := Response;
 Fetch(S);
 S := Trim(S);
 Result := StrToIntDef(Fetch(S, " ", False), -1);
end;

procedure ConnectThroughProxy(ProxyList:TStrings);
var
 IdTCPClient:TIdTCPClient;
 i:integer;
begin
 IdTCPClient:=TIdTCPClient.Create(nil);
 try
   IdTCPClient.Host:=ProxyList.Names[0];;
   IdTCPClient.Port:=StrToInt(ProxyList.ValueFromIndex[0]);
   IdTCPClient.Connect;
   i:=1;
   while i<ProxyList.Count-1 do
   begin
     IdTCPClient.IOHandler.WriteLn("CONNECT "+ProxyList.Names[i]+":"+ProxyList.ValueFromIndex[i]+" HTTP/1.1"#13#10#13#10);
     inc(i)
   end;

   IdTCPClient.IOHandler.WriteLn("GET somedata"#13#10#13#10);

 finally
   IdTCPClient.Free;
 end;

end;


 
Slym ©   (2006-05-16 15:20) [12]

if GetResponseCode(IdTCPClient.IOHandler.ReadLn)<>200 then raise Exception.Create("error"); нужно применять после
IdTCPClient.IOHandler.WriteLn


 
w!zard ©   (2006-05-16 15:50) [13]

seeker и Slym, спасибо, щас буду разбираться )
Slym, а откуда ты взял function GetResponseCode(const Response:string): Integer; и procedure ConnectThroughProxy(ProxyList:TStrings);  ??


 
Slym ©   (2006-05-16 16:06) [14]

w!zard ©   (16.05.06 15:50) [13]
а откуда ты взял function GetResponseCode(const Response:string): Integer; и procedure ConnectThroughProxy(ProxyList:TStrings);  ??

от туда же откуда ты взял:
seeker и Slym, спасибо, щас буду разбираться )


 
w!zard ©   (2006-05-16 17:30) [15]

При запуске возникает ошибка тут:
IdTCPClient.IOHandler.WriteLn
как я понял параметр WriteLn не поддерживается?


 
Slym ©   (2006-05-17 08:13) [16]

У тебя версия Indy не та что у меня... но аналог есть ищи


 
w!zard ©   (2006-05-17 20:07) [17]

Fetch(S);
Здесь тоже ошибка (
S - понятно, а Fetch это что?



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2006.10.08;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.034 c
2-1159097390
Серый
2006-09-24 15:29
2006.10.08
MainMenu


15-1158570394
Layner
2006-09-18 13:06
2006.10.08
Как в справке HLP сделать описание слова


2-1158484364
dreamse
2006-09-17 13:12
2006.10.08
Ошибка в переборе компонентов


15-1158657530
PHPDeveloper
2006-09-19 13:18
2006.10.08
issh.exe


15-1158557532
Id
2006-09-18 09:32
2006.10.08
Установочный пакет с FB 1.5





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский