Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Internet IP herausfinden... (https://www.delphipraxis.net/11433-internet-ip-herausfinden.html)

hircusmutzus 6. Nov 2003 14:43


Internet IP herausfinden...
 
Hi,

ich denke die Frage gabs schon mal aber ich habe nix in der Suche und bei Google gefunden, deshalb stelle ich die Frage noch mal hier:

Ich möchte meine Internet-IP herausfinden und dann mit einem Label anzeigen... Wie kann ich das machen? Ich erinnere mich dunkel dass ic´h mal irgendwo gelesenhabe, dass man auf ner HP (irgendwie www.whatsmyip.net oder so) die Internet IP erföhrt und dann irgendwie kopiert oder so, aber wie gesagt ich finds nicht mehr und weis auch nicht wie das geht...

MfG Matthias Volland

sharkx 6. Nov 2003 14:56

Re: Internet IP herausfinden...
 
parse den text von www.meineip.de

hircusmutzus 6. Nov 2003 15:10

Re: Internet IP herausfinden...
 
Hi,
erst mal danke für die Antwort, aber genau das ist ja mein Problem - ich weis nicht wie das geht!!!

MfG Matthias Volland

Daniel B 6. Nov 2003 15:11

Re: Internet IP herausfinden...
 
Delphi-Quellcode:
uses ..., WinSock;
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);

  function GetIPAddress: String;
  var
    PHoste: PHostEnt;
    Buffer: array [0..100] of Char;
    WSAData: TWSADATA;
  begin
    Result := '';
    if WSAStartup($0101, WSAData) <> 0 then
      Exit;
    GetHostName(Buffer, SizeOf(Buffer));
    PHoste := GetHostByName(buffer);
    if phoste = nil then
      Result := '127.0.0.1'
    else
      Result := StrPas(Inet_NToa(PInAddr(phoste^.h_addr_list^)^));
    WSACleanup;
  end;

begin
  ShowMessage(GetIPAddress);
end;

hircusmutzus 6. Nov 2003 15:15

Re: Internet IP herausfinden...
 
Hi Daniel B,
den Quelltext hab ich, aber der zeigt nur die lokale IP an, mir gehts aber um die Internet IP!!!

MfG Matthias Volland

Daniel B 6. Nov 2003 15:17

Re: Internet IP herausfinden...
 
Ich kriege damit meine Internet-IP raus.

Luckie 6. Nov 2003 15:21

Re: Internet IP herausfinden...
 
Hängst du eventuell hinter einem Router?

hircusmutzus 6. Nov 2003 15:24

Re: Internet IP herausfinden...
 
Nee, ich habe keinen Router, nur das DSL-Modem...

MfG Matthias Volland

Daniel B 6. Nov 2003 15:50

Re: Internet IP herausfinden...
 
Hab auch nur ein DSL-Modem dran, nix Netzwerk oder ähnliches. Es muss auch bei Dir gehen, was bekommst Du denn in der Message angezeigt?

hircusmutzus 6. Nov 2003 15:54

Re: Internet IP herausfinden...
 
Da steht nur 192.168.1.1 und das ist meine lokale IP,

ich hab auch mal im Internet geguckt, die ist halt anders!!!

MfG Matthias Volland

Kamil 6. Nov 2003 16:23

Re: Internet IP herausfinden...
 
Die Funktion GetIpAddress von Daniel beachtet nicht, dass GetHostByName mehrere IP Adressen zurückliefern kann. Das Ergebnis leifert nur die erste IP Adresse in der Liste.

Versuchs mal damit:
-GetIPs liefert dir ne Liste mit allen IP Adressen des PCs
-GetInetIP versucht die Adresse der Verbindung, die das point-to-point Protokol verwendet (dieses Protokol wird von den meisten Provider verwendet) zu holen. Falls das nicht klappt (also keine PPP Verbindung da ist) wird die erste(*) IP von GetIPs zurückgeliefert. Somit hat man schon mit einer hohen Wahrscheinlichkeit die richtige IP.

(*)Du könntest die Funktion noch erweitern:
GetInetIP könnte noch alle lokalen IP Adressen, die GetIPs liefert, rausfiltern.
Und falls das alle IPs entfernen würde, dann könntest du noch die www.whatsmyip.com Version noch einbauen.

Delphi-Quellcode:
function GetIPs: TStrings;
type
  TaPInAddr = array[0..10] of PInAddr;
  PaPInAddr = ^TaPInAddr;
var
  phe: PHostEnt;
  pptr: PaPInAddr;
  Buffer: array[0..63] of Char;
  I: Integer;
  GInitData: TWSAData;
begin
  WSAStartup($101, GInitData);
  Result := TstringList.Create;
  Result.Clear;
  GetHostName(Buffer, SizeOf(Buffer));
  phe := GetHostByName(buffer);
  if phe = nil then Exit;
  pPtr := PaPInAddr(phe^.h_addr_list);
  I   := 0;
  while pPtr^[I] <> nil do
  begin
    Result.Add(inet_ntoa(pptr^[I]^));
    Inc(I);
  end;
  WSACleanup;
end;

function GetInetIP: string;
var
  IpHlpModule: THandle;
  GetAdaptersInfo: function (pAdapterInfo: PTIP_ADAPTER_INFO; pOutBufLen: PULONG): DWORD; stdcall;
  pAdapterInfo, old: PTIP_ADAPTER_INFO;
  len: integer;
begin
  try
    result:=GetIPs[0];
  except
    result:='0.0.0.0';
  end;
  IpHlpModule:=LoadLibrary(IpHlpDLL);
  try
    if IpHlpModule=0 then
    begin
      exit;
    end;
    GetAdaptersInfo:=GetProcAddress(IpHlpModule, 'GetAdaptersInfo');
    getmem(pAdapterInfo, sizeof(TIP_ADAPTER_INFO));
    old:=pAdapterInfo;
    try
      len:=sizeof(TIP_ADAPTER_INFO);
      GetAdaptersInfo(pAdapterInfo, @len);
      result:=pAdapterInfo^.IPAddressList.IpAddress;
      while pAdapterInfo<>nil do
      begin
        if pAdapterInfo^.aType=IF_PPP_ADAPTERTYPE then
          result:=pAdapterInfo^.IPAddressList.IpAddress;
        pAdapterInfo:=pAdapterInfo.Next;
      end;
    finally
      freemem(old);
    end;
  finally
    if IpHlpModule<>0 then
    begin
      FreeLibrary(IpHlpModule);
    end;
  end;
end;

hircusmutzus 6. Nov 2003 16:33

Re: Internet IP herausfinden...
 
Hi,
erst mal danke für die ausführliche Hilfe!!! Das funktioniert teilweise: Die erste Funktion (GetIPs) liefert mir beide Adressen. Bei der zweiten Fkt. nennt mir der Compiler nur einige Fehler (z.B. kennt er eine function nicht...) - keine ahnung aber eigtentlich auch egal, denn die 1. Methode funktioniert ja!!!

MfG Matthias Volland

Kamil 6. Nov 2003 16:41

Re: Internet IP herausfinden...
 
weil folgendes fehlt:
Code:
type
  TIP_ADDRESS_STRING = array[0..15] of char;

  PTIP_ADDR_STRING = ^TIP_ADDR_STRING;
  TIP_ADDR_STRING = packed record
    Next: PTIP_ADDR_STRING;
    IpAddress: TIP_ADDRESS_STRING;
    IpMask: TIP_ADDRESS_STRING;
    Context: DWORD;
  end;

  PTIP_ADAPTER_INFO = ^TIP_ADAPTER_INFO;
  TIP_ADAPTER_INFO = packed record
    Next: PTIP_ADAPTER_INFO;
    ComboIndex: DWORD;
    AdapterName: array[1..MAX_ADAPTER_NAME_LENGTH + 4] of char;  
    Description: array[1..MAX_ADAPTER_DESCRIPTION_LENGTH + 4] of char;  
    AddressLength: UINT;
    Address: array[1..MAX_ADAPTER_ADDRESS_LENGTH] of byte;    
    Index: DWORD;
    aType: UINT;
    DHCPEnabled: UINT;
    CurrentIPAddress: PTIP_ADDR_STRING;
    IPAddressList: TIP_ADDR_STRING;
    GatewayList: TIP_ADDR_STRING;
    DHCPServer: TIP_ADDR_STRING;
    HaveWINS: BOOL;
    PrimaryWINSServer: TIP_ADDR_STRING;
    SecondaryWINSServer: TIP_ADDR_STRING;
    LeaseObtained: LongInt ;
    LeaseExpires: LongInt;
    SpareStuff: array [1..2000] of char ;
  end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:12 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz