Delphi-PRAXiS

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

gast5 12. Sep 2011 11:15

Internet IP herausfinden
 
Hallo,
gibt es eine Möglichkeit wie man mit einem Delphiprogramm die eigene Internet IP herausfinden kann? Also wenn man auf einem Button drückt dass dann die Internet IP auf einen Label angezeigt wird. Wenn ja könnt ihr den Quelltext hier posten. Danke für jede Antwort..

s.h.a.r.k 12. Sep 2011 11:17

AW: Internet IP herausfinden
 
So einfach ists das leider nicht möglich, da wenn du hinter einem Router sitzt, dieser ja die IP-Adresse für den Internetzugang inne hat. Du könntest eine Website kontaktieren und die entsprechende IP auslesen. Diese beinhaltet eben eine Website herunterladen (-> Indys) und den Quelltext parsen (-> z.B. RegEx).

Klaus01 12. Sep 2011 11:17

AW: Internet IP herausfinden
 
Hallo,

vielleicht magst Du dir ja diesen Thread einmal anschauen.

Grüße
Klaus

himitsu 12. Sep 2011 11:20

AW: Internet IP herausfinden
 
http://www.delphipraxis.net/144872-e...ermitteln.html


gefunden über [DP]öffentliche ip internet[/DP]

SubData 14. Sep 2011 16:32

AW: Internet IP herausfinden
 
Alternativ einen externen Dienst wie checkip.dyndns.org abrufen und diese IP verwenden...

Sir Rufo 14. Sep 2011 23:35

AW: Internet IP herausfinden
 
Es liegt in der Natur des Internets, dass jedes Gerät nur seine nächste Gegenstelle kennen muss um eine Verbindung zu einem x-beliebigen Punkt im Internet zu erreichen.
In dem Beispiel unten kennt der Rechner mit der Adresse A den Router unter der Adresse B.
Die Adresse C ist für den Rechner absolut nicht notwendig zu wissen (auch wenn diese interessant sein könnte).
Code:
        A B        C
Rechner <-> Router <-> Internet
Somit gibt es 2 Möglichkeiten an die Adresse C zu gelangen:

1. via einem Web-Dienst (wie schon erwähnt)
2. den Router fragen (ist von Router zu Router anders bis gar unmöglich)

Möglichkeit 1 macht zwar abhängig vom entsprechenden Web-Dienst, dafür macht Möglichkeit 2 abhängig vom Router-Modell.
Die Frage ist nur, welchen Tod will ich nun sterben ;)

s.h.a.r.k 15. Sep 2011 08:45

AW: Internet IP herausfinden
 
Wobei es an der Stelle vielleicht auch interessanter ist die IP über einen (oder mehrere) Webservices abzufrgen, da man so auch erfahren kann, ob man überhaupt mit dem Internet verbunden ist. Klar, der Webservice kann down oder abgeschalten sein, dafür würde ich auch 3 Webservices befrage. Eine tolle Übungs für Threads :stupid:

Alaitoc 15. Sep 2011 08:50

AW: Internet IP herausfinden
 
Zur Aussage "ob man mit dem Internet verbunden ist" fällt mir spontan das ein:

http://www.marian-aldenhoevel.de/dojo/internet.html

Nur so nebenbei...:)

MfG Alaitoc

NickelM 22. Sep 2011 08:24

AW: Internet IP herausfinden
 
Es gibt von www.whatismyip.com einen für programmier entwickelte "automatisierung"
diese ist folgende
Code:
http://automation.whatismyip.com/n09230945.asp
und ich rufe diese dan mit TIdHTTP und Get ab.
Dort ist nur die IP drin sonst nichts.

Gruß NickelM

gast5 24. Sep 2011 13:55

AW: Internet IP herausfinden
 
hab jetzt zwar den code gefunden:

Delphi-Quellcode:
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, winsock, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    ListBox1: TListBox;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }
  function GetIpAddressByName(const Lines:TStrings; const AHost: String): Boolean;
type
  PPInAddr= ^PInAddr;
var
  WSA: TWSAData;
  HostInfo: PHostEnt;
  Addr: PPInAddr;
begin
  Result:=False;
  if WSAStartUp($101, WSA) = 0 then
  begin
    try
      HostInfo:= getHostByName(PChar(AHost));
      Result:=HostInfo<>nil;
      if Result then
      begin
        Addr:=Pointer(HostInfo^.h_addr_list);
        if (Addr<>nil) AND (Addr^<>nil) then
        begin
          Repeat
            Lines.Add(StrPas(inet_ntoa(Addr^^)) ) ;
            inc(Addr);
          Until Addr^=nil;
        end;
      end;
    finally
     WSACleanup;
    end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if GetIpAddressByName (Listbox1.Items, ('http://automation.whatismyip.com/n09230945.asp') )then
   Showmessage('OK')
 else
   ShowMessage('Fehler');
end;

end.
Aber es zeigt mir Fehler an. Was habe ich falsch gemacht

himitsu 24. Sep 2011 16:06

AW: Internet IP herausfinden
 
Was für Fehler?

(daß man auch ständig nachfragen muß :wall:)



Abgesehn dafür daß dieser Code eh nur die internen IPs liefert und nicht die öffentlichen.

Tipp: Die genutzten APIs in diesem Code arbeiten nur mit ANSI, also ab Delphi 2009 sollte man sich mal die tausenden Unicode-Thenem ansehn, welche hier rumschwirren.


PS: Es gibt auch ein [DELPHI]-Tag :zwinker:

mschaefer 24. Sep 2011 18:22

AW: Internet IP herausfinden
 
Delphi-Quellcode:
Function TForm1.GeExtIP: string;
 var ndx: integer;
 begin
    result:=uppercase(Http1.Get('http:\\www.network-tools.com'));
    if result='' then result:='GET failed' else
    begin
        ndx:=pos('HOST',result);
        if ndx=0 then result:='host not found' else
        begin
            delete(result,1,ndx+4);
            ndx:=pos('VALUE=',result);
            if ndx>0 then delete(result,1,ndx+6);
            ndx:=pos('"',result);
            if ndx>0 then result:=copy(result,1,ndx);
        end;
      end;
 end;
Externe-IP sieht man schlicht von extern, also muß man extern fragen.

Luckie 24. Sep 2011 18:48

AW: Internet IP herausfinden
 
Zitat:

Zitat von gast5 (Beitrag 1126425)
Aber es zeigt mir Fehler an. Was habe ich falsch gemacht

Du hast bei deinem Beitrag keine Code-Tags verwendet. Du verschweigst uns den "Fehler".

gast5 25. Sep 2011 18:54

AW: Internet IP herausfinden
 
Der Quelltext lässt sich fehlerfrei kompilieren und das Projekt lässt sich auch fehlerfrei öffnen. Aber sobald ich auf den Button geklickt habe öffnet sich die Fehlerbox (es steht Fehler darauf) und das obwohl ich mit dem Internet verbunden bin.
Normalerweise sollte auf den Memo die Internet IP angezeigt werden zusammen mit einer OK Box.

Luckie 25. Sep 2011 19:08

AW: Internet IP herausfinden
 
Zitat:

Zitat von gast5 (Beitrag 1126573)
Der Quelltext lässt sich fehlerfrei kompilieren und das Projekt lässt sich auch fehlerfrei öffnen. Aber sobald ich auf den Button geklickt habe öffnet sich die Fehlerbox (es steht Fehler darauf) und das obwohl ich mit dem Internet verbunden bin.
Normalerweise sollte auf den Memo die Internet IP angezeigt werden zusammen mit einer OK Box.

Dann geh die Routine doch einfach mal Schritt für Schritt durch und guck, was passiert.

Christian Seehase 25. Sep 2011 20:13

AW: Internet IP herausfinden
 
Mal abgesehen davon, dass der Code bei mir einwandfrei funktioniert (D7):
Er tut nicht das, was Du willst.
Damit bekommst Du die IP-Adresse der Domain, die der Funktion übergeben wird, und nicht die Deines Rechners.

NickelM 26. Sep 2011 17:28

AW: Internet IP herausfinden
 
Ich würde sagen du arbeitest mit Lazarus.
Das musst du davor sagen oder als Tag oder irgendwo im Betreff/Text angeben.
Also unter Delphi geht das so:
Ohne Indy jetzt:
Delphi-Quellcode:
uses WinInet;
function GetInetIP(var IP: AnsiString): boolean;
var
   hSession, hURL: HInternet;
   BufferLen: DWORD;
   Buffer : AnsiChar;
   sAppName: string;
 begin
  result := false;
  sAppName := ExtractFileName(Application.ExeName);
  hSession := InternetOpen(PChar(sAppName), INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0) ;
  try
   hURL := InternetOpenURL(hSession, PChar('http://automation.whatismyip.com/n09230945.asp'), nil, 0, 0, 0) ;
   try
   BufferLen := 0;
   repeat
   InternetReadFile(hURL, @Buffer, 1, BufferLen);
   IP := IP + Buffer;
   until BufferLen = 0;
   result := True;
   finally
    InternetCloseHandle(hURL)
   end
  finally
   InternetCloseHandle(hSession)
  end
end;
Versuch mal ob Lazarus die Unit WinInet auch kennt.
Arbeite nämlich nicht mit Lazarus.

gast5 27. Sep 2011 15:06

AW: Internet IP herausfinden
 
Ja ich arbeite mit Lazarus und Lazarus kennt auch die Unit WinInet. Wenn ich den Quellltext kompiliere kommt aber leider rein garnichts.:cry:
Woran könnte es liegen?

DeddyH 27. Sep 2011 15:09

AW: Internet IP herausfinden
 
Bist Du einmal durchgesteppt?

himitsu 27. Sep 2011 15:16

AW: Internet IP herausfinden
 
Das sind WinAPIs ... die Funktionieren unter Lazarus genauso, wie unter Delphi.


Abgesehn vielleicht von der Stringcodierung > Ansi, Unicode oder UTF-8, wo man aufpassen muß.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:46 Uhr.

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