Avatar billede hoppeged Nybegynder
17. september 2001 - 01:41 Der er 9 kommentarer og
1 løsning

Find ip

Jeg er ved at lave et program der finder min IP - gerne den lokale (i dette tilfælde 192.168.1.2) og den eksterne 213.237.x.x

Er der eb funktiond er gør det eller skal man have fat i et component?

//hoppegeden
Avatar billede ziron Nybegynder
17. september 2001 - 01:45 #1
til at finde din egen kan du bruge:

function LocalIP : String;
type
  TArrayPInAddr = array [0..10] of PInAddr;
  PArrayPInAddr = ^ TArrayPInAddr;
  var
  phe      : PHostEnt;
  pptr    : PArrayPInAddr;
  Buffer  : array [0..63] of char;
  i        : integer;
  GInitData: TWSADATA;
begin
  WSAStartup($101, GInitData);
  result := \'\';
  GetHostName(Buffer, sizeof(Buffer));
  phe := GetHostByName(Buffer);
  if phe=nil then
  begin
    exit
  end;
  pptr := PArrayPInAddr(phe^.h_addr_list);
  i := 0;
  while pptr^[i]<>nil do
  begin
    result := StrPas(inet_ntoa(pptr^[i]^));
    Inc(i);
  end;
  WSACleanup;
end;


i uses bruger den enten \"winsock\" eller \"wininet\" kan ikke lige huske...

og hvis du skal finde din udgående ip skal du til at lave alt muligt sjov, da den jo er opsat på fx en router... (vil jeg mene)...

/ZIRON
Avatar billede hoppeged Nybegynder
17. september 2001 - 02:01 #2
Jeg har nu siddet og bikset med det - og det er WinSock jeg skal bruge - men hvad for en string kommer ip-nummeret ud af?
Avatar billede ziron Nybegynder
17. september 2001 - 02:04 #3
okay, og du kan bare gører sådan:

Showmessage(LocalIP);

eller

edit1.text := LocalIP;

/ZIRON
Avatar billede hoppeged Nybegynder
17. september 2001 - 02:11 #4
Jeg har forsøgt med begge - bruger følgende:

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    procedure Edit1Change(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Edit1Change(Sender: TObject);
begin

Edit1.text := LocalIP;

end;

function LocalIP : String;
type
  TArrayPInAddr = array [0..10] of PInAddr;
  PArrayPInAddr = ^ TArrayPInAddr;
  var
  phe      : PHostEnt;
  pptr    : PArrayPInAddr;
  Buffer  : array [0..63] of char;
  i        : integer;
  GInitData: TWSADATA;
begin
  WSAStartup($101, GInitData);
  result := \'\';
  GetHostName(Buffer, sizeof(Buffer));
  phe := GetHostByName(Buffer);
  if phe=nil then
  begin
    exit
  end;
  pptr := PArrayPInAddr(phe^.h_addr_list);
  i := 0;
  while pptr^[i]<>nil do
  begin
    result := StrPas(inet_ntoa(pptr^[i]^));
    Inc(i);
  end;
  WSACleanup;
end;

end.

------------------------

men er der ikke et sted jeg mangelr at declare functionen?
Avatar billede hoppeged Nybegynder
17. september 2001 - 02:11 #5
Sorry - er ikke så skrap til Delphi endnu :)
Avatar billede ziron Nybegynder
17. september 2001 - 02:13 #6
nej, det du har lavet virker det ikke???

/ZIRON
Avatar billede hoppeged Nybegynder
17. september 2001 - 02:14 #7
ved Edit1.txt := LocalIP; får jeg

[Error] Unit1.pas(29): Undeclared identifier: \'LocalIP\'
Avatar billede ziron Nybegynder
17. september 2001 - 02:16 #8
jeg har ikke delphi på denne com (har lige formateret) så heg kan ikke prøve at kører det. så hvis det ikke virker må du vente til imorgen tidelig...

men prøv med:

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    procedure Edit1Change(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

function LocalIP : String;

implementation

{$R *.DFM}

procedure TForm1.Edit1Change(Sender: TObject);
begin

Edit1.text := LocalIP;

end;

function LocalIP : String;
type
  TArrayPInAddr = array [0..10] of PInAddr;
  PArrayPInAddr = ^ TArrayPInAddr;
  var
  phe      : PHostEnt;
  pptr    : PArrayPInAddr;
  Buffer  : array [0..63] of char;
  i        : integer;
  GInitData: TWSADATA;
begin
  WSAStartup($101, GInitData);
  result := \'\';
  GetHostName(Buffer, sizeof(Buffer));
  phe := GetHostByName(Buffer);
  if phe=nil then
  begin
    exit
  end;
  pptr := PArrayPInAddr(phe^.h_addr_list);
  i := 0;
  while pptr^[i]<>nil do
  begin
    result := StrPas(inet_ntoa(pptr^[i]^));
    Inc(i);
  end;
  WSACleanup;
end;

end.

/ZIRON
Avatar billede ziron Nybegynder
17. september 2001 - 02:18 #9
nje prøv dette:

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    procedure Edit1Change(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}



function LocalIP : String;
type
  TArrayPInAddr = array [0..10] of PInAddr;
  PArrayPInAddr = ^ TArrayPInAddr;
  var
  phe      : PHostEnt;
  pptr    : PArrayPInAddr;
  Buffer  : array [0..63] of char;
  i        : integer;
  GInitData: TWSADATA;
begin
  WSAStartup($101, GInitData);
  result := \'\';
  GetHostName(Buffer, sizeof(Buffer));
  phe := GetHostByName(Buffer);
  if phe=nil then
  begin
    exit
  end;
  pptr := PArrayPInAddr(phe^.h_addr_list);
  i := 0;
  while pptr^[i]<>nil do
  begin
    result := StrPas(inet_ntoa(pptr^[i]^));
    Inc(i);
  end;
  WSACleanup;
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin

Edit1.text := LocalIP;

end;


end.

Avatar billede hoppeged Nybegynder
17. september 2001 - 02:22 #10
Nu virker det :) mange tak!
Fuldt fortjente points til dig :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester