Ver Mensaje Individual
  #2  
Antiguo 12-10-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Reputación: 24
seoane Va por buen camino
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.

Última edición por seoane fecha: 12-10-2006 a las 01:02:11.
Responder Con Cita