Форум: "Сети";
Текущий архив: 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