Fórum Pegar ip das duas placas de rede. #243009

14/07/2004

0

A minha dúvida é a seguinte como eu faço para pegar o IP de uma máquina que tem duas placas de rede consequentemente ela está em duas redes... ou seja tem dois IPS, como eu faço para especificar o IP que eu quero pegar por exemplo quero o IP da placa1 ou então quero o IP da placa2.

Sem mais
Tiago Zaniquelli


:arrow: [color=red:e780d37258]Título alterado pelo Moderador oTTo. Removido: ´Pega IP´.[/color:e780d37258]
:idea: [color=blue:e780d37258]Seja mais claro no título.[/color:e780d37258]
:idea: [color=blue:e780d37258]Leia sempre regras de conduta.[/color:e780d37258]


Ztiago

Ztiago

Responder

Posts

14/07/2004

Otto

:idea: Use sempre o link [url=http://delphiforum.icft.com.br/forum/search.php]Pesquisar [/url]no topo da página.

:arrow: Veja se isto pode lhe ajudar.. :wink:



unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    ComboBox1: TComboBox;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

const
  ANY_SIZE      = 1;

type
  PTMibIPAddrRow = ^TMibIPAddrRow;
  TMibIPAddrRow = packed record
    dwAddr: DWORD;
    dwIndex: DWORD;
    dwMask: DWORD;
    dwBCastAddr: DWORD;
    dwReasmSize: DWORD;
    Unused1,
      Unused2: WORD;
  end;
  PTMibIPAddrTable = ^TMibIPAddrTable;
  TMibIPAddrTable = packed record
    dwNumEntries: DWORD;
    Table: array[0..ANY_SIZE - 1] of TMibIPAddrRow;
  end;

function GetIpAddrTable( pIpAddrTable: PTMibIPAddrTable;
  pdwSize: PULONG;
  bOrder: BOOL ): DWORD;
stdcall; external ´IPHLPAPI.DLL´;

{ converts IP-address in network byte order DWORD to dotted decimal string}
function IpAddr2Str( IPAddr: DWORD ): string;
var
  i : integer;
begin
  Result := ´´;
  for i := 1 to 4 do
  begin
    Result := Result + Format( ´¬3d.´, [IPAddr and $FF] );
    IPAddr := IPAddr shr 8;
  end;
  Delete( Result, Length( Result ), 1 );
end;

procedure Get_IPAddrTable(Tipo: Integer; List: TStrings );
var
  IPAddrRow     : TMibIPAddrRow;
  TableSize     : DWORD;
  ErrorCode     : DWORD;
  i             : integer;
  pBuf          : PChar;
  NumEntries    : DWORD;
begin
  if not Assigned( List ) then EXIT;
  List.Clear;
  TableSize := 0; ;
  // first call: get table length
  ErrorCode := GetIpAddrTable( PTMibIPAddrTable( pBuf ), @TableSize, true );
  if Errorcode <> ERROR_INSUFFICIENT_BUFFER then
    EXIT;

  GetMem( pBuf, TableSize );
  // get table
  ErrorCode := GetIpAddrTable( PTMibIPAddrTable( pBuf ), @TableSize, true );
  if ErrorCode = NO_ERROR then
  begin
    NumEntries := PTMibIPAddrTable( pBuf )^.dwNumEntries;
    if NumEntries > 0 then
    begin
      inc( pBuf, SizeOf( DWORD ) );
      for i := 1 to NumEntries do
      begin
        Case Tipo of
        1 : begin
             IPAddrRow := PTMIBIPAddrRow( pBuf )^;
             with IPAddrRow do
               List.Add( Format( ´¬8.8x|¬15s|¬15s|¬15s|¬8.8d´,
                 [dwIndex, IPAddr2Str( dwAddr ), IPAddr2Str( dwMask ),
                   IPAddr2Str( dwBCastAddr ), dwReasmSize ] ) );
             inc( pBuf, SizeOf( TMIBIPAddrRow ) );
            end;
        2 : begin
             IPAddrRow := PTMIBIPAddrRow( pBuf )^;
             List.Add( Format(´¬15s´,[IPAddr2Str(IPAddrRow.dwAddr)]) );
             inc( pBuf, SizeOf( TMIBIPAddrRow ) );
            end;
        //3 : //;
        end;
      end;
    end
    else
      List.Add( ´no entries.´ );
  end
  else
    List.Add( SysErrorMessage( ErrorCode ) );

  // we must restore pointer!
  dec( pBuf, SizeOf( DWORD ) + NumEntries * SizeOf( IPAddrRow ) );
  FreeMem( pBuf );
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
  Get_IPAddrTable(1, Memo1.Lines);
  Get_IPAddrTable(2, ComboBox1.Items);
end;

end.



Responder

Gostei + 0

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

Aceitar