Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Eigene (Internet)IP rausfinden (https://www.delphipraxis.net/48018-eigene-internet-ip-rausfinden.html)

Pseudemys Nelsoni 19. Jun 2005 13:51


Eigene (Internet)IP rausfinden
 
Moin,

jo, ich weiss, es gab schon genug solcher Themen... aber eher mit nur "unsauberen" Methoden, von wegen IP per Seite ausgeben lassen, aber das kostet Zeit (egal wie schnell).

Gibt es eine "richtige" Methode? wenn ich "ipconfig" aufrufe, zeigt mir das Programm doch auch meine IP an und ich denke nicht das Microsoft das über ne Seite macht ;)

Zitat:

C:\Dokumente und Einstellungen\sub>ipconfig

Windows-IP-Konfiguration


Ethernetadapter LAN-Verbindung:

Verbindungsspezifisches DNS-Suffix:
IP-Adresse (Autokonfig.). . . . . : 169.254.45.50
Subnetzmaske. . . . . . . . . . . : 255.255.0.0
Standardgateway . . . . . . . . . :

PPP-Adapter HanseNet:

Verbindungsspezifisches DNS-Suffix:
IP-Adresse. . . . . . . . . . . . : 80.171.82.129
Subnetzmaske. . . . . . . . . . . : 255.255.255.255
Standardgateway . . . . . . . . . : 80.171.82.129
Kennt sonst noch jemand eine Möglichkeit?

Zacherl 19. Jun 2005 13:53

Re: Eigene (Internet)IP rausfinden
 
Hallo,
lad dir auf meiner Homepage (www.free30.com/florian) unter Delphi die Unit Neo.pas runter. Da ist eine Funktion GetIpAddress dabei, die ihre Daten nicht von einer Seite holt.

Florian

Pseudemys Nelsoni 19. Jun 2005 14:02

Re: Eigene (Internet)IP rausfinden
 
Moin Florian,

das Problem ist, das ich 2 IPS habe (siehe meinen ersten Post mit dem Zitat) und mir die Funktion aus der neo.pas, die erste IP anzeigt. Die zweite ist aber meine Internet IP

Pseudemys Nelsoni 19. Jun 2005 14:11

Re: Eigene (Internet)IP rausfinden
 
Hab schon und zwar hier:

http://www.swissdelphicenter.ch/de/showcode.php?id=67

mfg

scp 19. Jun 2005 14:24

Re: Eigene (Internet)IP rausfinden
 
Das Problem ergibt sich, wenn ein Router dazwischen hängt, dann gibt diese Funktion nur lokale IPs aus. Sollte das Programm für mehr als nur zum Eigenbedarf gedacht sein, reicht diese Funktion dann nicht mehr.

Pseudemys Nelsoni 19. Jun 2005 14:28

Re: Eigene (Internet)IP rausfinden
 
Moin scp,

war das auf die FUnktion der neo-unit bezogen oder auf diese: http://www.swissdelphicenter.ch/de/showcode.php?id=67 hier?

Übrigens was ich mich bei dem Code frage...

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;
Wieso ist das Array gerade 11 Elemente gross?

Ist das die maximale anzahl der IPS die man haben kann oder wie?

scp 19. Jun 2005 15:03

Re: Eigene (Internet)IP rausfinden
 
Es bezieht sich auf beide Routinen, da beide diesselben APIs aufrufen.
[0..10] ist denke ich mal willkürlich gewählt.

Der_Ventilator 13. Aug 2009 14:41

Re: Eigene (Internet)IP rausfinden
 
Zitat:

Zitat von Pseudemys Nelsoni

Delphi-Quellcode:
function getIPs: Tstrings;
  Buffer: array[0..63] of Char;
 ...
begin
...
  GetHostName(Buffer, SizeOf(Buffer));
...

Was muss ich machen, dass der Code auch unter D2009 läuft? Es beschwert sich, dass Buffer an der stelle GetHostName kein Array sein dürfte. Deklariere ich Buffer um zu einem normalen Char, bekomme ich kein Ergebnis zurückgeliefert.

himitsu 13. Aug 2009 14:45

Re: Eigene (Internet)IP rausfinden
 
Delphi-Quellcode:
GetHostName(@Buffer, Length(Buffer));
Es wird ja ein PChar verlangt, also ein Zeiger auf ein CharArray
und Len ist die Länge in Zeichen, und nicht in Byte, also Length statt SizeOf

Könnte aber sein, daß du die Ansiversion der Funktion bei dir definiert hast, dann zusätzlich noch Array of AnsiChar

DeddyH 13. Aug 2009 14:48

Re: Eigene (Internet)IP rausfinden
 
Vielleicht mit
Delphi-Quellcode:
GetHostName(@Buffer[0], SizeOf(Buffer));
:?: Ich hab aber kein D2009, um das auszuprobieren.

Luckie 13. Aug 2009 21:18

Re: Eigene (Internet)IP rausfinden
 
Zitat:

Zitat von Pseudemys Nelsoni
Gibt es eine "richtige" Methode? wenn ich "ipconfig" aufrufe, zeigt mir das Programm doch auch meine IP an und ich denke nicht das Microsoft das über ne Seite macht ;)

Machen sie auch nicht. Es werden immer die IP-Adressen angezeigt, die dem Adapter zugewiesen sind. Gehst du über einen Router ins Internet, wird dir die IP-Adresse angezeigt, die dir der Router zugewiesen hat. Wählst du dich direkt ein, wird dir natürlich die IP-Adresse angezeigt, die der Provider deinem Adapter zugewiesen hat.

Siehe hier:
Code:
Verbindungsspezifisches DNS-Suffix:
Beschreibung. . . . . . . . . . . : SiS 900-basierte PCI-Fast Ethernet-Adapter
Physikalische Adresse . . . . . . : 00-07-95-FB-A1-04
DHCP aktiviert. . . . . . . . . . : Nein
IP-Adresse. . . . . . . . . . . . : 192.168.2.100
Subnetzmaske. . . . . . . . . . . : 255.255.255.0
Standardgateway . . . . . . . . . : 192.168.2.1
DNS-Server. . . . . . . . . . . . : 192.168.2.1
Meine IP-Adresse und ich bin auch im Internet.

Willst du die IP-Adresse die der Provider deinem Router zugewiesen hat, musst du entweder direkt den Router fragen oder eben diesen Weg über eine Internetseite gehen, die dir deine IP nennt.

DeddyH 14. Aug 2009 08:10

Re: Eigene (Internet)IP rausfinden
 
Nja, das wird er nach 4 Jahren vermutlich verinnerlicht haben :mrgreen:

Der_Ventilator 14. Aug 2009 09:44

Re: Eigene (Internet)IP rausfinden
 
Zitat:

Zitat von DeddyH
Vielleicht mit
Delphi-Quellcode:
GetHostName(@Buffer[0], SizeOf(Buffer));
:?: Ich hab aber kein D2009, um das auszuprobieren.

Auch wenn ich nicht wirklich verstehe, was beim Aufruf mit @Buffer[0] passiert, (Zeige ich damit nur auf den ersten Buchstaben des Arrays?) funktioniert folgender angepasster Code unter D2009:


Delphi-Quellcode:
function getComputerIPs: Tstrings;
type
  TaPInAddr = array[0..10] of PInAddr;
  PaPInAddr = ^TaPInAddr;
var
  phe: PHostEnt;
  pptr: PaPInAddr;
  Buffer: array [0..63] of PAnsiChar;
  I: Integer;
  GInitData: TWSAData;
begin
  WSAStartup($101, GInitData);
  Result := TstringList.Create;
  Result.Clear;
  GetHostName(@Buffer[0], SizeOf(Buffer));
  phe := GetHostByName(@Buffer[0]);
  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;
Vielen Dank


Alle Zeitangaben in WEZ +1. Es ist jetzt 04: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