Форум: "Прочее";
Текущий архив: 2006.12.10;
Скачать: [xml.tar.bz2];
Внизготов признать что вы крутые программеры Найти похожие ветки
← →
Tirael © (2006-11-18 04:56) [0]если посоветуете что нить полезное... я задавал както ворос про прокси, про локальный, про тот к которому обращаются по 127.0.0.1... как его сделать? я пробовал с сокетами, возникали проблемы, я их описывал, но так никто и не помог, поэтому вопрос другой: хотелось бы ссылки на статьи, примеры кода по сабжу.
ЗЫ все ругают студентов за вопросы, но на вопросы сложнее студенческих ответить не могут... парадокс
← →
Джо © (2006-11-18 04:57) [1]> готов признать что вы крутые программеры
Пожалуй, не признавай. Думаю, от этого никто не умрет.
← →
atruhin © (2006-11-18 05:40) [2]> я задавал както ворос про прокси, про локальный, про тот
> к которому обращаются по 127.0.0.1... как его сделать?
Этот вопрос, по уровню именно студенческий! Не ответили тебе наверное потому, что
так задал вопрос. Литературы в сети, на данную тему море, и статьи и книги.
http://www.google.com/search?hs=akF&hl=ru&client=opera&rls=ru&q=winsock&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&lr=
Когда прочитаешь и будет КОНКРЕТНЫЕ вопросы, например: почему функция XXX возвращает не ожидаемый результат + пример кода с вызовом,
тебе тут же дадут ответ.
← →
KilkennyCat © (2006-11-18 07:23) [3]> [0] Tirael © (18.11.06 04:56)
у тя высшее образование, а у мня нет. По логике, я должен тебе задавать вопросы, а не наоборот. Студенческие.
← →
lookin © (2006-11-18 07:24) [4]test
← →
Gydvin © (2006-11-18 08:10) [5]Мне в приципе пофиг кого ты признаешь программистом, кого нет. И нефиг делать тупой развод. Можно просто спросить.
ЗЫ. Посмотри, здесь есть исходник локального прокси
http://www.delphisources.ru/pages/sources/internet/1_internet.html
← →
isasa © (2006-11-18 08:45) [6]Tirael © (18.11.06 04:56)
... я задавал както ворос про прокси, про локальный, про тот к которому обращаются по 127.0.0.1...
Вообще-то, я тихо догадываюсь, что речь идет о HTTP туннелинге.
Попробуй, рулит ли Яндекс на эту тему(выделено жирным). Остальное, все есть в описании стека TCP/IP протоколов и адресации в таких сетях. Рулит, тот же.
← →
umbra © (2006-11-18 10:36) [7]если isasa © (18.11.06 08:45) [6] прав, то все, что надо сделать, это
1) приконнектиться к HTTP прокси, получить от него ответ 200
2) с помощью имеющегося соединения коннектиться куда надо.
Недописанная реализация есть в инди 10 (IdConnectThroughHTTPProxy.pas), принцип описан в http://www.web-cache.com/Writings/Internet-Drafts/draft-luotonen-web-proxy-tunneling-01.txt
← →
MikePetrichenko © (2006-11-18 11:08) [8]Что-то последнее время вопросы стали очень похоже на задания с WebLancer.
К чему движемся?
← →
antonn © (2006-11-18 11:23) [9]MikePetrichenko © (18.11.06 11:08) [8]
что на WebLancer меньше специалистов из разных областей?
← →
Anatoly Podgoretsky © (2006-11-18 13:04) [10]> Tirael (18.11.2006 4:56:00) [0]
На слабо берешь?
← →
Anatoly Podgoretsky © (2006-11-18 13:47) [11]> lookin (18.11.2006 7:24:04) [4]
Это ответ?
← →
KilkennyCat © (2006-11-18 13:55) [12]> [11] Anatoly Podgoretsky © (18.11.06 13:47)
Это ответ, вопрос, как его применить? :)
← →
Anatoly Podgoretsky © (2006-11-18 14:13) [13]> KilkennyCat (18.11.2006 13:55:12) [12]
А это не наша проблема.
← →
Гарри Поттер © (2006-11-18 14:29) [14]> ЗЫ все ругают студентов за вопросы, но на вопросы сложнее
> студенческих ответить не могут... парадокс
"Вопросы заданые студентами" и "вопросы заданые студентам" - совершенно разные вещи. т.к. часто студенты сами не понимают о чем спрашивают.
← →
Piter © (2006-11-18 14:37) [15]детский развод какой-то.
Tirael © (18.11.06 4:56)
готов признать что вы крутые программеры
Tirael © (18.11.06 4:56)
если посоветуете что нить полезное...
пипец... При такой постановке вопроса в жизнь ничего не посоветую, если только пойти кое-куда на неопределенный срок.
← →
Tirael © (2006-11-18 15:10) [16]2KilkennyCat у меня высшее но я не программер
> Piter © (18.11.06 14:37) [15]
>
> детский развод какой-то.
как ни странно сработал, ссылок дали, а тогда ничего не здали (
← →
KilkennyCat © (2006-11-18 15:13) [17]> [16] Tirael © (18.11.06 15:10)
> 2KilkennyCat у меня высшее но я не программер
И что?
ИМХО, ты путаешь наличие диплома с образованием. Говори честно - "у меня есть диплом о высшем образовании".
← →
Tirael © (2006-11-18 15:19) [18]2KilkennyCat я тебя не понял, диплом у меня есть, но совсем в другой области, и информатику нам преподавали в обьеме проги на бейсике строк в 10 длиной
← →
KilkennyCat © (2006-11-18 15:23) [19]> [18] Tirael © (18.11.06 15:19)
Просто человек с высшим образованием общается по-другому. Он, скажем так, умнее.
← →
MsGuns © (2006-11-18 16:04) [20]>KilkennyCat © (18.11.06 15:23) [19]
>Просто человек с высшим образованием общается по-другому. Он, скажем так, умнее.
Нет. ОбразОванее. А это совсем иное.
← →
Anatoly Podgoretsky © (2006-11-18 16:27) [21]> MsGuns (18.11.2006 16:04:20) [20]
Да нет у него высшего образования, разве не видно.
← →
Rouse_ © (2006-11-18 17:04) [22]
> я задавал както ворос про прокси, про локальный, про тот
> к которому обращаются по 127.0.0.1... как его сделать?
делаешь слушающий сервер и транслируешь данные дальше... в чем проблема то? пример нужен или информация?
← →
Palladin © (2006-11-18 17:08) [23]
> [22] Rouse_ ©
Программа нужна, что бы откомпилировал и заработало. Он бы потом ее продавал и получал деньги.
← →
Tirael © (2006-11-18 17:15) [24]Rouse_ вообщето и то и другое, все чего не жалко. я делал как ты говоришь, но были загвоздки, короч не вышло ничего, я приводил тут свои идеи и описания загвоздок, так никто и не ответил толком, решил не лезть со своим, спросить у народа, мож кто чем поделится...
← →
Gero © (2006-11-19 00:08) [25]> [21] Anatoly Podgoretsky © (18.11.06 16:27)
> Да нет у него высшего образования, разве не видно.
Именно. У него диплом.
← →
Anatoly Podgoretsky © (2006-11-19 00:35) [26]> Gero (19.11.2006 0:08:25) [25]
И я про тоже
← →
Rouse_ © (2006-11-19 00:36) [27]НА вот тебе от Сергея пример:
{*******************************************************}
{ }
{ HTTP Proxy Server }
{ }
{ Copyright (c) 2002 Sergey Polevikov }
{ }
{*******************************************************}
program proxy;
{$APPTYPE CONSOLE}
uses
SysUtils, Windows, Winsock, Classes;
type TCompletionPort=class
public
FHandle:THandle;
constructor Create(dwNumberOfConcurentThreads:DWORD);
destructor Destroy;override;
function AssociateDevice(hDevice:THandle;dwCompKey:DWORD):boolean;
end;
TAcceptThread=class(TThread)
private
FListenSocket:TSocket;
FListenPort:Word;
FClientList:TList;
procedure GarbageCollect;
protected
procedure Execute;override;
public
constructor Create(AListenPort:Word);reintroduce;
destructor Destroy;override;
end;
type TClientThread=class(TThread)
public
procedure Execute;override;
end;
type TClient=class
private
FSocket:TSocket;
FEvent:THandle;
ov:POVERLAPPED;
Buffer:Pointer;
BufSize:Cardinal;
procedure Write(Buf:Pointer;Size:Cardinal);
public
FOppositeClient:TClient;
FLastActivity:double;
constructor Create;
destructor Destroy;override;
procedure Connect(ARequest:string);
procedure Disconnect;
procedure Complete(dwNumBytes:Cardinal);virtual;abstract;
end;
TInternalClient=class(TClient)
public
procedure Complete(dwNumBytes:Cardinal);override;
end;
TExternalClient=class(TClient)
public
procedure Complete(dwNumBytes:Cardinal);override;
end;
//-------------------------------implementation-------------------------------
var
FCompPort:TCompletionPort;
procedure LWrite(Text: String; Color: Word; BreakLine: Byte);
var
tmpColor: Word;
sbinfo: _CONSOLE_SCREEN_BUFFER_INFO;
begin
GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), sbinfo);
tmpColor:= sbinfo.wAttributes;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Color);
if Boolean(BreakLine) then WriteLn(Text) else Write(Text);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), tmpColor);
end;
{ TCompletionPort }
constructor TCompletionPort.Create(dwNumberOfConcurentThreads: DWORD);
begin
FHandle:=CreateIoCompletionPort(INVALID_HANDLE_VALUE,0,0,dwNumberOfConcurentThre ads);
end;
function TCompletionPort.AssociateDevice(hDevice: THandle;
dwCompKey: DWORD): boolean;
begin
result:=CreateIoCompletionPort(hDevice,FHandle,dwCompKey,0)=FHandle;
end;
destructor TCompletionPort.Destroy;
begin
CloseHandle(FHandle);
inherited;
end;
{ TAcceptThread }
constructor TAcceptThread.Create(AListenPort: Word);
begin
inherited Create(false);
FListenPort:=AListenPort;
FClientList:=TList.Create;
end;
destructor TAcceptThread.Destroy;
begin
FClientList.Free;
inherited;
end;
procedure TAcceptThread.GarbageCollect;
var
AClient:TClient;
i:integer;
begin
for i:=0 to FClientList.Count-1 do begin
AClient:=TClient(FClientList[i]);
if Assigned(AClient) then
if (AClient.FSocket=INVALID_SOCKET) and ((now-AClient.FLastActivity)>7E-4) then
begin
FClientList[i]:=nil;
if Assigned(AClient.FOppositeClient) then AClient.FOppositeClient.Free;
AClient.Free;
end;
end;
FClientList.Pack;
FClientList.Capacity:=FClientList.Count;
end;
← →
Rouse_ © (2006-11-19 00:37) [28]
procedure TAcceptThread.Execute;
var
FAddr: TSockAddrIn;
Len: Integer;
ClientSocket:TSocket;
InternalClient:TClient;
begin
FListenSocket := socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
FAddr.sin_family := PF_INET;
FAddr.sin_addr.s_addr := INADDR_ANY;
FAddr.sin_port := htons(FListenPort);
bind(FListenSocket, FAddr, SizeOf(FAddr));
listen(FListenSocket, SOMAXCONN);
try
while not Terminated do begin
Len:=sizeof(FAddr);
ClientSocket:=accept(FListenSocket, @FAddr, @Len);
try
GarbageCollect;
if ClientSocket<>INVALID_SOCKET then begin
InternalClient:=TInternalClient.Create;
InternalClient.FSocket:=ClientSocket;
FClientList.Add(InternalClient);
FCompPort.AssociateDevice(InternalClient.FSocket,Cardinal(InternalClient));
InternalClient.Complete(0);
end;
except end;
end;
finally
shutdown(FListenSocket,2);
closesocket(FListenSocket);
end;
end;
{ TClientThread }
procedure TClientThread.Execute;
var
CompKey,dwNumBytes:Cardinal;
ov:POVERLAPPED;
begin
try
while not Terminated do begin
if GetQueuedCompletionStatus(FCompPort.FHandle,dwNumBytes,CompKey,ov,INFINITE) and (dwNumBytes>0) then
begin
if TClient(CompKey).FSocket<>INVALID_SOCKET then begin
TClient(CompKey).Complete(dwNumBytes);
TClient(CompKey).FLastActivity:=now;
end;
end else
TClient(CompKey).Disconnect;
end;
except
TClientThread.Create(false);
end;
end;
{ TClient }
constructor TClient.Create;
begin
FSocket:=INVALID_SOCKET;
BufSize:=8192;
GetMem(Buffer,BufSize);
new(ov);
ov.Internal:=0;
ov.InternalHigh:=0;
ov.Offset:=0;
ov.OffsetHigh:=0;
ov.hEvent:=0;
FEvent:=CreateEvent(nil,true,false,nil);
FLastActivity:=now;
end;
destructor TClient.Destroy;
begin
Disconnect;
CloseHandle(FEvent);
FreeMem(Buffer);
Dispose(ov);
inherited;
end;
////////////////////////////////////////////////////////////////////////////////
//
// Прием запроса на подключение к удаленному хосту
procedure TClient.Connect(ARequest: string);
var
f,t:integer;
ARemoteAddress:string;
ARemotePort:string;
he:PHostEnt;
FAddr:TSockAddrIn;
begin
f:=Pos("/",ARequest)+2;
t:=Pos("HTTP",ARequest)-1;
ARemoteAddress:=Copy(ARequest,f,t-f);
t:=Pos("/",ARemoteAddress);
if t<>0 then ARemoteAddress:=Copy(ARemoteAddress,0,t-1);
t:=Pos(":",ARemoteAddress);
if t<>0 then begin
ARemotePort:=Copy(ARemoteAddress,t+1,Length(ARemoteAddress)-t);
ARemoteAddress:=Copy(ARemoteAddress,0,t-1);
end else
ARemotePort:="80";
WriteLn("Trying to connect: "+ ARemoteAddress);
he:=GetHostByName(PChar(ARemoteAddress));
if not Assigned(he) then exit;
ARemoteAddress:=inet_ntoa(PInAddr(he.h_addr_list^)^);
FSocket:=socket(PF_INET, SOCK_STREAM, IPPROTO_IP);
FAddr.sin_family:=PF_INET;
FAddr.sin_addr.s_addr :=inet_addr(PChar(ARemoteAddress));
try
FAddr.sin_port := htons(StrToInt(ARemotePort));
if WinSock.connect(FSocket, FAddr, SizeOf(FAddr))=SOCKET_ERROR then FSocket:=INVALID_SOCKET;
except
WriteLn("Connection failed");
end;
end;
← →
Rouse_ © (2006-11-19 00:37) [29]
procedure TClient.Disconnect;
begin
if FSocket<>INVALID_SOCKET then begin
shutdown(FSocket,2);
closesocket(FSocket);
FSocket:=INVALID_SOCKET;
if Assigned(FOppositeClient) then FOppositeClient.Disconnect;
end;
end;
procedure TClient.Write(Buf: Pointer; Size: Cardinal);
var
BytesWrite:Cardinal;
begin
ov.hEvent:=FEvent or 1;
WriteFile(FSocket,Buf^,Size,BytesWrite,ov);
ov.hEvent:=0;
end;
{ TInternalClient }
procedure TInternalClient.Complete(dwNumBytes: Cardinal);
var
BytesRead:Cardinal;
begin
if dwNumBytes>0 then begin
if not Assigned(FOppositeClient) then begin
FOppositeClient:=TExternalClient.Create;
FOppositeClient.FOppositeClient:=self;
FOppositeClient.Connect(PChar(Buffer));
if FOppositeClient.FSocket=INVALID_SOCKET then begin
Disconnect;
exit;
end;
FCompPort.AssociateDevice(FOppositeClient.FSocket,Cardinal(FOppositeClient));
FOppositeClient.Complete(0);
end;
FOppositeClient.Write(Buffer,dwNumBytes);
end;
ReadFile(FSocket,Buffer^,BufSize,BytesRead,ov);
end;
{ TExternalClient }
procedure TExternalClient.Complete(dwNumBytes: Cardinal);
var
BytesRead:Cardinal;
begin
if dwNumBytes>0 then FOppositeClient.Write(Buffer,dwNumBytes);
ReadFile(FSocket,Buffer^,BufSize,BytesRead,ov);
end;
{ Graphik}
const
ClientThreadCount:integer=8;
ListenPort:Dword=80;
var
WSAData:TWSAData;
Cnt:Cardinal;
i:integer;
Buff: array [0..10] of char;
ConsoleText: String;
begin
LWrite("Prepare to work:",FOREGROUND_GREEN or FOREGROUND_INTENSITY,0);
Writeln("");
LWrite("=======================",FOREGROUND_GREEN or FOREGROUND_INTENSITY,0);
Writeln("");
LWrite("Create main socket:",FOREGROUND_RED or FOREGROUND_INTENSITY,0);
FCompPort:=TCompletionPort.Create(ClientThreadCount);
LWrite(" Ok",FOREGROUND_RED or FOREGROUND_INTENSITY,0);
Writeln("");
if FCompPort.FHandle<>0 then begin
LWrite("Initialise:",FOREGROUND_RED or FOREGROUND_INTENSITY,0);
WSAStartup($0101, WSAData);
LWrite(" Ok",FOREGROUND_RED or FOREGROUND_INTENSITY,0);
Writeln("");
LWrite("Create main threads:",FOREGROUND_RED or FOREGROUND_INTENSITY,0);
for i:=0 to ClientThreadCount-1 do TClientThread.Create(false);
TAcceptThread.Create(ListenPort);
LWrite(" Ok",FOREGROUND_RED or FOREGROUND_INTENSITY,0);
Writeln("");
LWrite("=======================",FOREGROUND_GREEN or FOREGROUND_INTENSITY,0);
Writeln("");
LWrite("Proxy activate",FOREGROUND_GREEN or FOREGROUND_INTENSITY,0);
Writeln("");
LWrite("=======================",FOREGROUND_GREEN or FOREGROUND_INTENSITY,0);
Writeln("");
repeat
ReadConsole(GetStdHandle(STD_INPUT_HANDLE),@Buff,10,Cnt,nil);
ConsoleText := String(Buff);
until UpperCase(Copy(ConsoleText,1,4)) = "EXIT";
WSACleanup;
end;
end.
← →
Gero © (2006-11-19 00:38) [30]> [27] Rouse_ © (19.11.06 00:36)
Теперь тебя признают крутым программером!
← →
Anatoly Podgoretsky © (2006-11-19 00:40) [31]> Gero (19.11.2006 0:38:30) [30]
Раскрутили :-)
На слабо взяли.
← →
Rouse_ © (2006-11-19 00:42) [32]
> Теперь тебя признают крутым программером!
Вот блин, и что теперь делать? ;)
← →
Anatoly Podgoretsky © (2006-11-19 01:00) [33]> Rouse_ (19.11.2006 0:42:32) [32]
А теперь поздно пить Боржоми.
← →
KilkennyCat © (2006-11-19 01:05) [34]> [33] Anatoly Podgoretsky © (19.11.06 01:00)
ЕссентУкки круче :)))
← →
Юрий Зотов © (2006-11-19 01:07) [35]> Rouse_ © (19.11.06 00:42) [32]
Ни фига ты, Розыч, не крутой программер. А еще спрашиваешь, что теперь делать.
Делать остается только одно - ехать в Бабруйск, там выпить йаду и убить сибя ап стену.
:о)
← →
Rouse_ © (2006-11-19 01:14) [36]Эка тебя Юр на Жаве в последнюю неделю развезло :) То 64-ую базу спрашиваешь, то бабруйск советуешь :) Ты ли это?
← →
Rouse_ © (2006-11-19 01:16) [37]Контрользый вопрос для Юры Зотова (сомнения закрались) - в 2004 году в ванне сломалась штучка у тебя. Как называлась эта чтучка? :)
← →
Anatoly Podgoretsky © (2006-11-19 01:18) [38]> Rouse_ (19.11.2006 1:16:37) [37]
:-)
← →
KilkennyCat © (2006-11-19 01:27) [39]> сломалась штучка у тебя
:))
← →
Плохиш © (2006-11-19 01:32) [40]
> Rouse_ © (19.11.06 01:14) [36]
> Эка тебя Юр на Жаве в последнюю неделю развезло
Если на жаве, то точно он. На ней ещё не так развезти может :-( Я теперь понял, почему iZen такой злой...
Страницы: 1 2 вся ветка
Форум: "Прочее";
Текущий архив: 2006.12.10;
Скачать: [xml.tar.bz2];
Память: 0.57 MB
Время: 0.051 c