Fórum Delphi Pegar IP Local #596081

07/08/2018

0

Olá, quero pegar o IP Local de um determinado PC
Para fazer isso montei a seguinte funçao:

Function IPLocal( PC:String ):String;
var IP:TIdIPWatch; Host: TIdStackWindows;
begin
   Host := TIdStackWindows.Create;
   try
      Result := Host.ResolveHost( PC );
   Finally
      Host.Free;
   end;
End;


Ela funciona bem, desde que na maquina só exista um IP Local disponivel
Por exemplo, na minha maquina eu tenho o Virtual Box instalado.
o Virtual Box criou um adaptador de rede e disponibilizou um novo IP local: 192.168.56.1
.
Quando executo a minha funcao ela retorna o ip do virtualbox
Porem eu preciso do ip do adaptador de rede fisico ao qual eu desejo conectar a minha aplicacao.
.
Alguém poderia dizer para desinstalar o virtual box, seria uma soluçao,
porém no cliente pode haver algo semelhante, ou até duas placas de rede instalada
(caso cada placa possa ter um IP diferente, na mesma maquina, o que acredito que seja verdade, nao tive como testar aqui)
.
Entao precisaria pegar o endereço IP Local do adaptador de rede específico.
Tentei fuçar nas propriedades desse componente que uso na funcao acima, mas nao encontrei nada.
.
Alguem saberia como fazer?
Alberto

Alberto

Responder

Posts

10/08/2018

Ermesom Lourenco

Meu caro, não sei se ajuda mas utilizo esta função para buscar o mac do pc que consegue pegar a lista de todos os macs da máquina. Recomendo procurar para ver se alguma das propriedades há a informação do IP:

function TFormPrincipal.getMacsNew: TStrings;
var
  i: Integer;
  NumInterfaces: Cardinal;
  AdapterInfo: array of TIpAdapterInfo;
  OutBufLen: ULONG;
  mac: string;
begin
  GetNumberOfInterfaces(NumInterfaces);
  SetLength(AdapterInfo, NumInterfaces);
  OutBufLen := NumInterfaces * SizeOf(TIpAdapterInfo);
  GetAdaptersInfo(@AdapterInfo[0], OutBufLen);

  Result := TStringList.Create;
  for i := 0 to NumInterfaces - 1 do begin
    mac := Format('%.2x:%.2x:%.2x:%.2x:%.2x:%.2x',
      [AdapterInfo[i].Address[0], AdapterInfo[i].Address[1],
       AdapterInfo[i].Address[2], AdapterInfo[i].Address[3],
       AdapterInfo[i].Address[4], AdapterInfo[i].Address[5]]);

    if mac <> '00:00:00:00:00:00' then
      Result.Add(mac)
    else
      Break;
  end;
end;
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar