criar servidor proxy http/socks delphi

Discussão em 'Dicas e tutoriais' iniciado por kodo no kami, 30 Dezembro 2016.

  1. kodo no kami
    Offline

    kodo no kami Membro Conhecido

    Afiliado:
    16 Dezembro 2015
    Mensagens:
    229
    Sexo:
    Masculino
    Avaliações:
    +303 / -0
    e ae galera nesse tutorial vou ensinar criar um servidor de proxy em delphi usando um componente que existe no delphi especifico para isso no caso o indy, vou esta usando o delphi xe4 sendo que o mesmo pode ser feito em outros delphi inclusive o delphi 7 ou ate mesmo em outras IDEs como lazarus e borland c++ (porem algumas delas como o delphi 7 deve ser instalado a versao mais recente do indy), tambem nesse tutorial vamos estar criando o proxy do tipo http e o proxy do tipo socks tendo uma opção para alternar entre os dois, para começar abrimos o delphi e criamos uma nova aplicação

    [​IMG]

    vamos começar criando a interface do programa sendo que nela vai ter um edit para especificar a porta (no atributo text dele colocamos uma porta padrao), dois radiu button um para o proxy http e outro para proxy socks (alteramos o atributo caption de cada para o nome e um dos dois colocamos true no atributo checked para ser o padrao), colocamos dois botões um para ativar o proxy e outro para desativar (tambem mudamos o atributo caption deles para ativar e outro para desativar sendo o desativar a gente coloca false no atributo enabled para desabilitar)

    [​IMG]

    agora colocamos dois componentes de proxy da aba indy server sendo eles o idHttpServer e idSocksServer

    [​IMG]

    no evento onclick do botao que vai ativar o proxy no meu caso esse botao se chama Button1 setamos a porta nos dois componentes de proxy no atributo defaultport dela, sendo o que vamos atribuir para ela é o atributo text do edit (temos que converter de string para inteiro usando a função strtoint tambem)

    Código (Forge Crash):
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      IdHTTPServer1.DefaultPort := strtoint(Edit1.Text);
      IdSocksServer1.DefaultPort := strtoint(Edit1.Text);
    end;
    tambem desabilitamos o proprio botão para evitar do usuario ficar clicar nele varias vezes podendo buga a parada e habilitamos o botao que vai desativar o proxy (aquele que colocamos como false), para isso usamos o atributo enabled nos botões bastando atribuir true ou false para habilitar e desabilitar eles (no meu caso tenho que desabilitar o button1 e habilitar o button2), como tambem desabilitamos o edit para evitar da pessoa mudar a porta (embora pela logica nao faz nenhuma diferença so estetica mesmo)

    Código (Forge Crash):
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      IdHTTPServer1.DefaultPort := strtoint(Edit1.Text);
      IdSocksServer1.DefaultPort := strtoint(Edit1.Text);
      Button1.Enabled := False;
      Button2.Enabled := True;
      Edit1.Enabled := False;
    end;
    colocamos uma condição IF checando o checked de um dos radios buttons para definir se vamos iniciar o http ou socks, como estamos mexendo apenas com duas opções podemos coloca para ativar uma no if e a outra pelo else

    Código (Forge Crash):
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      IdHTTPServer1.DefaultPort := strtoint(Edit1.Text);
      IdSocksServer1.DefaultPort := strtoint(Edit1.Text);
      Button1.Enabled := False;
      Button2.Enabled := True;
      Edit1.Enabled := False;

      if RadioButton1.Checked then
      begin
      end
      else
      begin
      end;
    end;
    no if a gente ativa um dos proxy sendo ele o equivalente ao radio button que estamos checando e no else ativamos ou outro proxy, no caso qual vai ser ativado depende do radio button, depois disso a parte do ativar estara pronta

    Código (Forge Crash):
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      IdHTTPServer1.DefaultPort := strtoint(Edit1.Text);
      IdSocksServer1.DefaultPort := strtoint(Edit1.Text);
      Button1.Enabled := False;
      Button2.Enabled := True;
      Edit1.Enabled := False;

      if RadioButton1.Checked then
      begin
      IdHTTPServer1.Active := True;
      end
      else
      begin
      IdSocksServer1.Active := True;
      end;
    end;
    [​IMG]

    agora falta criar a parte que desativa o proxy, no evento do onclick do botão que desativa o proxy vamos fazer o inverso habilitando o botao que ativa o proxy e desabilitando o botao que desativa, e habilitamos o edit tambem

    Código (Forge Crash):
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      Button1.Enabled := True;
      Button2.Enabled := False;
      Edit1.Enabled := True;
    end;
    agora basta desativar os dois proxy (nao é necessario criar um if ja que nao vão interferir com se desativar)

    Código (Forge Crash):
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      Button1.Enabled := True;
      Button2.Enabled := False;
      Edit1.Enabled := True;
      IdHTTPServer1.Active := False;
      IdSocksServer1.Active := False;
    end;
    [​IMG]

    esta pronto o nosso proxy bastando compilar e executar ele (recomendado salvar o projeto tambem em File->Save all)

    [​IMG]

    agora basta a gente setar o IP dessa maquina em outra maquina como proxy para usar o proxy

    [​IMG]

    por fim ver se realmente ta navegando

    [​IMG]

    bom galera como podemos ver é bem simples a criação de um servidor de proxy em delphi ^^

    by kodo no kami
     
    • Útil Útil x 1

Compartilhe esta Página