AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Internet IP herausfinden...
Thema durchsuchen
Ansicht
Themen-Optionen

Internet IP herausfinden...

Ein Thema von hircusmutzus · begonnen am 6. Nov 2003 · letzter Beitrag vom 6. Nov 2003
Antwort Antwort
Seite 2 von 2     12   
Kamil

Registriert seit: 17. Aug 2002
178 Beiträge
 
#11

Re: Internet IP herausfinden...

  Alt 6. Nov 2003, 17:23
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;
  Mit Zitat antworten Zitat
hircusmutzus
(Gast)

n/a Beiträge
 
#12

Re: Internet IP herausfinden...

  Alt 6. Nov 2003, 17:33
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
  Mit Zitat antworten Zitat
Kamil

Registriert seit: 17. Aug 2002
178 Beiträge
 
#13

Re: Internet IP herausfinden...

  Alt 6. Nov 2003, 17:41
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;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:52 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