Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Проверка проксика (https://forum.antichat.xyz/showthread.php?t=12040)

FHT 22.12.2005 19:31

Проверка проксика
 
Господа! Меня волнует вопрос какой запрос нужно послать прокси серверу, что бы он индетифицировал себя?
ЗЫ: Собираюсь писать прокси чекер "для_себя", просто не могу разобраться с запросом.

dinar_007 24.12.2005 21:05

Ммм... не совсем ясна проблема... распиши пожалуйста подробнее, что именно тебе нужно ))) Всмысле, чтобы онидентифицировал себя?

DeathLess 11.01.2006 08:59

просто попытайся подключиться к чему-нибудь через прокси-сервер

Morph 21.01.2006 23:12

Если требуетсья установить прокся это или нет хз.
Если вообще жива ли прокся или как ойнить бред который живет на этом порту то достаточн оприконетиться иначе она мертва.

F1reF0x 24.01.2006 00:29

Простой чекер прокси на компонентах (просто пример, перпиши на 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;

Хотя писать чекер на компонентах глупо :)

Barsik 24.01.2006 02:02

Это на Дэльфе чтоль?

Raider 24.01.2006 03:10

Цитата:

Это на Дэльфе чтоль?
Ну да :)

F1reF0x 24.01.2006 14:32

Цитата:

Это на Дэльфе чтоль?
Это процедура для кнопки Start. (Delphi)

Если кто не понял ещё на форме полжные прсутвовать 2 Memo исменами SourceMemo и ResultMemo и компонент idHTTP со вкладки Indy Clients и ещё одна кнопка (как раз для неё процедура написаная выше).

Raider 25.01.2006 01:59

Сёдня попытался сделать простенький чекер на сокетах, зацените )
(думаю в коментариях код не нуждается ... да и в лом как-то коментить =)

Код:

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;



Время: 15:16