Просмотр полной версии : Проверка проксика
Господа! Меня волнует вопрос какой запрос нужно послать прокси серверу, что бы он индетифицировал себя?
ЗЫ: Собираюсь писать прокси чекер "для_себя", просто не могу разобраться с запросом.
dinar_007
24.12.2005, 21:05
Ммм... не совсем ясна проблема... распиши пожалуйста подробнее, что именно тебе нужно ))) Всмысле, чтобы онидентифицировал себя?
DeathLess
11.01.2006, 08:59
просто попытайся подключиться к чему-нибудь через прокси-сервер
Если требуетсья установить прокся это или нет хз.
Если вообще жива ли прокся или как ойнить бред который живет на этом порту то достаточн оприконетиться иначе она мертва.
Простой чекер прокси на компонентах (просто пример, перпиши на WinSock).
Var
Source: String;
Host: String;
Port: String;
I: Integer;
P: Integer;
Begin
For i:= 0 to SourceMemo.Lines.Counts - 1 do
Begin
P:= Pos(':', SourceMemo.Lines.String[i]);
Host:= Copy(SourceMemo.Lines.String[i], 0 , P);
Port:= Copy(SourceMemo.Lines.String[i], P + 1, Length(SourceMemo.Lines.Strings[i] - p - 1));
idHTTP.ProxyParams.Host:= Host;
idHTTP.ProxyParams.Port:= StrToInt(Port);
Source:= idHTTP.Get('http://ya.ru');
if Pos('http://www.yandex.ru/', Source) <> 0 then
Begin
ResultMemo.Lines.Add(Proxy + ' : ' + Port + ' подключение удалось');
End
Else
Begin
ResultMemo.Lines.Add(Proxy + ' : ' + Port + ' подключение не удалось');
End;
End;
ResultMemo.Lines.SaveToFile('Checked.txt');
End;
Хотя писать чекер на компонентах глупо :)
Это на Дэльфе чтоль?
Ну да :)
Это на Дэльфе чтоль?
Это процедура для кнопки Start. (Delphi)
Если кто не понял ещё на форме полжные прсутвовать 2 Memo исменами SourceMemo и ResultMemo и компонент idHTTP со вкладки Indy Clients и ещё одна кнопка (как раз для неё процедура написаная выше).
Сёдня попытался сделать простенький чекер на сокетах, зацените )
(думаю в коментариях код не нуждается ... да и в лом как-то коментить =)
type
PCheckProxy = ^TCheckProxy;
TCheckProxy = record
ProxyHost : PChar;
ProxyPort : Word;
Timeout : Byte; // в секундах
ConnectTo : PChar;
ControlStr: PChar;
end;
function CheckProxy(lpCheckProxy: PCheckProxy) : Boolean;
function GetIpByName : Boolean;
var
HostEnt: PHostEnt;
begin
HostEnt := gethostbyname(lpCheckProxy^.ProxyHost);
Result := HostEnt <> nil;
if Result then
lpCheckProxy^.ProxyHost := inet_ntoa(PInAddr(HostEnt.h_addr_list^)^);
end;
var
Arg: Integer;
Query: String;
TV: TTimeVal;
FSet: TFDSet;
Socket: TSocket;
addr: sockaddr_in;
WSAData: TWSAData;
procedure IoCtl(cmd: DWord);
begin
ioctlsocket(Socket, cmd, Arg);
end;
begin
Result := False;
if WSAStartup($0101, WSAData) = 0 then
try
Socket := WinSock.socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if Socket <> INVALID_SOCKET then
try
if inet_addr(lpCheckProxy^.ProxyHost) = INADDR_NONE then
if not GetIpByName then
Exit;
ZeroMemory(@addr, SizeOf(sockaddr_in));
with addr, lpCheckProxy^ do
begin
sin_family := AF_INET;
sin_port := htons(ProxyPort);
sin_addr.S_addr := inet_addr(ProxyHost);
end;
Arg := 1;
IoCtl(FIONBIO);
FD_ZERO(FSet);
FD_SET(Socket, FSet);
TV.tv_sec := lpCheckProxy^.Timeout; TV.tv_usec := 0;
connect(Socket, addr, SizeOf(sockaddr_in));
if WSAGetLastError <> WSAEWOULDBLOCK then
Exit;
if select(0, nil, @FSet, nil, @TV) <> 1 then
Exit;
Arg := 0;
IoCtl(FIONBIO);
Query := 'GET ' + lpCheckProxy^.ConnectTo + ' HTTP/1.1'#13#10'User-Agent: Mozilla/4.0'#13#10#13#10;
if send(Socket, PChar(Query)^, Length(Query), 0) = SOCKET_ERROR then
Exit;
with lpCheckProxy^ do
ControlStr := PChar(LowerCase(ControlStr));
while not Result do
begin
if select(0, @FSet, nil, nil, @TV) <> 1 then
Break;
IoCtl(FIONREAD);
if Arg = 0 then
Exit;
SetLength(Query, Arg);
recv(Socket, PChar(Query)^, Arg, 0);
Result := Pos(lpCheckProxy^.ControlStr, LowerCase(Query)) <> 0;
end;
shutdown(Socket, SD_BOTH);
finally
closesocket(Socket);
end;
finally
WSACleanup;
end;
end;
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot