Skip to content

Como obtener todas las IP de un Ordenador

En artículos anteriores, enseñamos 3 maneras diferentes de como obtener la IP de una PC, pero recientemente me surgió un desafío.

En un nuevo proyecto, necesitaba desarrollar un Server Proxy para instalarlo en un ordenador con 4 placas de red de las cuales 2 estaban conectadas a diferentes conexiones de internet. En dicho Server Proxi, tenía que hacerle seleccionar al usuario desde que conexión se tomaría internet para su distribución a través del proxy.

En base a que conocía la forma de obtener la IP de un ordenador, comencé a investigar como podría obtener todas las IP, si es que poseía más de una.

En los componentes Indy, instalados por defecto en Delphi, poseemos una gran cantidad de componentes y unidades que manejas todo tipo de conexiones. Una de estas unidades es IdStack, que posee la clase TIdStack con la cual vamos a obtener todas las IP del dispositivo.

La función para obtener todas las IP de una PC es la siguiente:

Uses IdStack, IdGlobal;

procedure GetAllIP();
var
  LList: TIdStackLocalAddressList;
  LAddr: TIdStackLocalAddress;
begin
  LList := TIdStackLocalAddressList.Create;
  TIdStack.IncUsage;
  try
    GStack.GetLocalAddressList(LList);
    for var I := 0 to LList.Count - 1 do
    begin
      LAddr := LList[I];
      if LAddr.IPVersion = TIdIPVersion.Id_IPv4 then
        ComboBox1.Items.Add(LAddr.IPAddress);
    end;
  finally
    TIdStack.DecUsage;
  end;
end;

En el ejemplo de arriba, extraemos todas las IP y las guardamos en un TComboBox para que el usuario pueda seleccionar una.

Aclaramos que dicha función, extrae todas las IP versión 4, como lo indica en la siguiente línea:

      if LAddr.IPVersion = TIdIPVersion.Id_IPv4 then
        ComboBox1.Items.Add(LAddr.IPAddress);

Si lo que queremos es extraer todas las IP versión 6, cambiamos la línea por lo siguiente:

      if LAddr.IPVersion = TIdIPVersion.Id_IPv6 then
        ComboBox1.Items.Add(LAddr.IPAddress);

Y si no colocamos la condición, extraerá todas las IP sin distinguir la versión.