Dicas - Mudando o IP e DNS do windows em RunTime

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (1)  (1)

Neste artigo veremos como utilizar o Delphi para alterar IP e DNS do Windows em tempo de execução.

O problema: mudar o endereço IP de uma placa de rede sem reiniciar o PC. Para isso utilize a Listagem 1.

  1   function CriaProcesso(comando: string):integer;
  2   var
  3     zAppName: array[0..512] of char;
  4     zCurDir: array[0..255] of char;
  5     WorkDir: string;
  6     StartupInfo: TStartupInfo;
  7     ProcessInfo: TProcessInformation;
  8     Resultado: DWord;
  9   begin
  10    StrPCopy(zAppName, comando);
  11    GetDir(0, WorkDir);
  12    StrPCopy(zCurDir, WorkDir);
  13    FillChar(StartupInfo, Sizeof(StartupInfo), #0);
  14    StartupInfo.cb := Sizeof(StartupInfo);
  15    StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
  16    StartupInfo.wShowWindow := sw_hide;
  17   
  18    if not CreateProcess(nil, zAppName, nil, nil, false, 
          CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo) then
  19      Result := -1 { ponteiro para o PROCESS_INF }
  20    else
  21    begin
  22      WaitforSingleObject(ProcessInfo.hProcess, INFINITE);
  23      GetExitCodeProcess(ProcessInfo.hProcess,Resultado);
  24      Result := Resultado;
  25    end;
  26  end;
  27   
  28  function DefinirIP(NomeConexao, Ip, Netmask, Gateway: string):boolean;
  29  begin
  30    Result:=( CriaProcesso(Format('netsh int ip set address name="%s" 
          source=static %s %s %s 1',[ NomeConexao, Ip, NetMask, Gateway]))=0 );
  31  end;
  32   
  33   
  34  function FixarDNS(NomeConexao: String; ipDNS: string): boolean;
  35  begin
  36    Result:=( CriaProcesso(Format('netsh int ip set dns "%s" static %s',
         [NomeConexao, ipDNS]))=0 );
  37  end;
  38   
  39  procedure TForm1.Button1Click(Sender: TObject);
  40  begin
  41    if NOT DefinirIP( 'Conexão de Rede sem Fio', '192.168.25.126', '255.255.255.0', 
          '192.168.25.1') then
  42      ShowMessage('Erro na alteração do IP')
  43    else
  44      ShowMessage('IP alterado sem erros');
  45  end;
  46   
  47  procedure TForm1.Button2Click(Sender: TObject);
  48  begin
  49    if NOT FixarDNS( 'Conexão de Rede sem Fio', '192.168.25.1') then
  50      ShowMessage('Erro na Fixação do DNS')
  51    else
  52      ShowMessage('DNS alterado sem erros');
  53  end; 

Listagem 1. Exemplo de uso de Unicode String em showmessages.

  • Linha 1 à 26: Método para criar um processo do Windows e executar comandos através de Strings, similar ao que se faz no Prompt do DOS.
  • Linha 28 e 31: Método que monta uma String para definir o IP do Windows:
    o Parâmetro1: Nome do adaptador de Rede definido no Windows;
    o Parâmetro 2: IP que será definido;
    o Parâmetro 3: Máscara da rede;
    o Parâmetro 4: Número do Gateway que será definido para o adaptador;
  • Linha 34 à 37: Método que monta uma String para definir um DNS:
    o Parâmetro 1: Nome do adaptador de Rede definido no Windows;
    o Parâmetro 2: Valor do DNS;
  • Linha 39 a 45: Implementação do Evento OnClick do Button1 chamando o método DefinirIP passando os valores de exemplo;
  • Linha 47 a 53: Implementação do Evento OnClick do Button2 chamando o método FixarDNS passando os valores de exemplo.
 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?