Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Dir IP, Mask y Gateway (https://www.clubdelphi.com/foros/showthread.php?t=36440)

yorki 11-10-2006 21:41:27

Dir IP, Mask y Gateway
 
Hola soy nuevo en el foro y estoy buscando ayuda respecto a como obtener la configuracion IP de mi PC en variables String por separado.
Si, he buscado en el foro, pero solo puedo llegar a la dir IP, pero necesito ademas la mascara y el gateway. Esto es para hacer una pequeña aplicacion que cambie la configuracion IP de la PC y que el usuario mediante un boton pueda saber que configuración tiene en un momento determinado.
Gracias

yorki

seoane 12-10-2006 00:53:33

Por ahora te dejo un ejemplo de como obtener la ip, la mascara, la MAC y la descripción del interface. La Gateway te la dejo a ti:

Es una aplicación de consola:
Código Delphi [-]
program ipview;

{$APPTYPE CONSOLE}

uses Windows, SysUtils;

const
  MAX_INTERFACE_NAME_LEN = 256;
  MAXLEN_PHYSADDR = 8;
  MAXLEN_IFDESCR = 256;

type
  PMIB_IPADDRROW = ^TMIB_IPADDRROW;
  TMIB_IPADDRROW = packed record
    dwAddr: DWORD;
    dwIndex: DWORD;
    dwMask: DWORD;
    dwBCastAddr: DWORD;
    dwReasmSize: DWORD;
    unused1: SmallInt;
    wType: SmallInt;
  end;

  PMIB_IPADDRTABLE = ^TMIB_IPADDRTABLE;
  TMIB_IPADDRTABLE = record
    dwNumEntries: DWORD;
    table: array[0..0] of TMIB_IPADDRROW;
  end;

  PMIB_IFROW = ^TMIB_IFROW;
  TMIB_IFROW  = record
    wszName: array[1..MAX_INTERFACE_NAME_LEN] of WCHAR;
    dwIndex: DWORD;
    dwType: DWORD;
    dwMtu: DWORD;
    dwSpeed: DWORD;
    dwPhysAddrLen: DWORD;
    bPhysAddr: array[1..MAXLEN_PHYSADDR] of Byte;
    dwAdminStatus: DWORD;
    dwOperStatus: DWORD;
    dwLastChange: DWORD;
    dwInOctets: DWORD;
    dwInUcastPkts: DWORD;
    dwInNUcastPkts: DWORD;
    dwInDiscards: DWORD;
    dwInErrors: DWORD;
    dwInUnknownProtos: DWORD;
    dwOutOctets: DWORD;
    dwOutUcastPkts: DWORD;
    dwOutNUcastPkts: DWORD;
    dwOutDiscards: DWORD;
    dwOutErrors: DWORD;
    dwOutQLen: DWORD;
    dwDescrLen: DWORD;
    bDescr: array[1..MAXLEN_IFDESCR] of Byte;
  end;

function GetIpAddrTable(IpAddrTable: PMIB_IPADDRTABLE; pdwSize: PULONG;
  Order: BOOL): DWORD; stdcall; external 'iphlpapi.dll' name 'GetIpAddrTable';

function GetIfEntry(pIfRow: PMIB_IFROW): DWORD;
  stdcall; external 'iphlpapi.dll' name 'GetIfEntry';

function IpToStr(Ip: DWORD): string;
begin
  Result:= Format('%d.%d.%d.%d',
      [IP and $FF,(IP shr 8) and $FF,(IP shr 16) and $FF,(IP shr 24) and $FF]);
end;

function PhysAddrToStr(PhysAddr: PByte; Len: DWORD): string;
begin
  Result:= EmptyStr;
  while Len > 0  do
  begin
    Result:= Result + IntToHex(PhysAddr^,2);
    inc(PhysAddr);
    dec(Len);
  end;
end;

procedure Ejemplo;
var
  IfRow: TMIB_IFROW;
  Table: PMIB_IPADDRTABLE;
  Size: DWORD;
  i: Integer;
begin
  GetMem(Table, Sizeof(TMIB_IPADDRTABLE));
  try
    Size:= Sizeof(TMIB_IPADDRTABLE);
    if GetIpAddrTable(Table, @Size,  FALSE) =  ERROR_INSUFFICIENT_BUFFER then
    begin
      FreeMem(Table);
      GetMem(Table,Size);
    end;
    FillChar(Table^,Size,0);
    if GetIpAddrTable(Table, @Size,  FALSE) =  NO_ERROR then
    begin
      for i:= 0 to Table.dwNumEntries - 1 do
      begin
        FillChar(IfRow,Sizeof(IfRow),0);
        IfRow.dwIndex:= Table.table[i].dwIndex;
        if GetIfEntry(@IfRow) =  NO_ERROR then
          with IfRow do
          begin
            Writeln('Descripcion: ' + Copy(String(PChar(@bDescr)),1,dwDescrLen));
            Writeln('Physical address: ' + PhysAddrToStr(@bPhysAddr,dwPhysAddrLen));
          end;
        with Table.table[i] do
        begin
          Writeln('Address: ' + IpToStr(dwAddr));
          Writeln('Mask: ' + IpToStr(dwMask));
          Writeln;
        end;
      end;
    end;
  finally
    FreeMem(Table);
  end;
end;

begin
  Ejemplo;
  Writeln('Pulsa una  para terminar ...');
  Readln;
end.

yorki 12-10-2006 15:18:30

Configuración IP
 
Bueno primero que nada muchas gracias a seoane por su ayuda.
Ahora, ya se que corro el riesgo de que nadie mas me responda o me tire un cabo como decimos los cubanos, pero recien empiezo a dar mis primeros pasos en delphi y si no es molestia me gustaria ver si podian darme un norte de como funciona la aplicación, que de echo la probe y me cuadró bastante, aunque la necesitaria hacer en una ventana de windows, pero quisiera saber un poco al respecto. Si tuvieran algun enlace o pdf, o cualquier documentacion con la cual romperme los sesos y poder adentrarme mas en este mundo, sobre todo en lo que respecta a hacer cosas como estas de la Configuracion IP, es decir cosas con el sistema operativo. He oido que esto es mediante las API, pero estoy en pañales.
Saludos
yorki

seoane 12-10-2006 17:59:48

Veo que no te asusta leer, eso esta bien, mucha gente quiere que le den todo hecho. Lamentablemente la mayoría de información sobre el tema esta en C, y si no estas familiarizado con este lenguaje y con delphi, puede resultarte complicado traducir las funciones y estructuras. De todas formas aquí te dejo algo para leer, es la pagina de microsoft sobre la API iphelper, que es la que se encarga de manejar todo esto.

http://msdn.microsoft.com/library/de...start_page.asp

Echale un vistazo, y para cualquier duda aquí estamos :)


La franja horaria es GMT +2. Ahora son las 23:04:01.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi