Проверка проксика

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by FHT, 22 Dec 2005.

  1. FHT

    FHT Elder - Старейшина

    Joined:
    21 Sep 2005
    Messages:
    454
    Likes Received:
    212
    Reputations:
    168
    Господа! Меня волнует вопрос какой запрос нужно послать прокси серверу, что бы он индетифицировал себя?
    ЗЫ: Собираюсь писать прокси чекер "для_себя", просто не могу разобраться с запросом.
     
    1 person likes this.
  2. dinar_007

    dinar_007 Мадемуазель

    Joined:
    18 Jan 2005
    Messages:
    1,019
    Likes Received:
    770
    Reputations:
    97
    Ммм... не совсем ясна проблема... распиши пожалуйста подробнее, что именно тебе нужно ))) Всмысле, чтобы онидентифицировал себя?
     
  3. DeathLess

    DeathLess New Member

    Joined:
    21 Oct 2005
    Messages:
    11
    Likes Received:
    2
    Reputations:
    1
    просто попытайся подключиться к чему-нибудь через прокси-сервер
     
    1 person likes this.
  4. Morph

    Morph Пирожок с Маком

    Joined:
    13 Aug 2004
    Messages:
    790
    Likes Received:
    113
    Reputations:
    169
    Если требуетсья установить прокся это или нет хз.
    Если вообще жива ли прокся или как ойнить бред который живет на этом порту то достаточн оприконетиться иначе она мертва.
     
    1 person likes this.
  5. F1reF0x

    F1reF0x Elder - Старейшина

    Joined:
    13 Nov 2004
    Messages:
    14
    Likes Received:
    9
    Reputations:
    10
    Простой чекер прокси на компонентах (просто пример, перпиши на 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);
    Host:= Copy(SourceMemo.Lines.String, 0 , P);
    Port:= Copy(SourceMemo.Lines.String, P + 1, Length(SourceMemo.Lines.Strings - 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;

    Хотя писать чекер на компонентах глупо :)
     
    1 person likes this.
  6. Barsik

    Barsik Блoxacтый

    Joined:
    16 Jan 2005
    Messages:
    267
    Likes Received:
    238
    Reputations:
    182
    Это на Дэльфе чтоль?
     
    1 person likes this.
  7. Raider

    Raider Elder - Старейшина

    Joined:
    2 May 2005
    Messages:
    40
    Likes Received:
    5
    Reputations:
    4
    Ну да :)
     
    1 person likes this.
  8. F1reF0x

    F1reF0x Elder - Старейшина

    Joined:
    13 Nov 2004
    Messages:
    14
    Likes Received:
    9
    Reputations:
    10
    Это процедура для кнопки Start. (Delphi)

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

    Raider Elder - Старейшина

    Joined:
    2 May 2005
    Messages:
    40
    Likes Received:
    5
    Reputations:
    4
    Сёдня попытался сделать простенький чекер на сокетах, зацените )
    (думаю в коментариях код не нуждается ... да и в лом как-то коментить =)

    Code:
    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;