Entwickler-Ecke

Internet / Netzwerk - eigene IP herausfinden


Tomok - Mo 21.04.03 10:19
Titel: eigene IP herausfinden
Ich nutze zur Zeit die GameNet.pas Unit (http://www.zoksoftware.de/).
Ich habe folgende 2 Fragen :
1.Eignet sich die Unit auch für Spiele über's Internet ?
2.Wie finde ich heraus, welche IP ich im Internet habe ?


Moritz M. - Mo 21.04.03 10:28

Ein paar Links zu 2:
http://swissdelphicenter.ch/de/showcode.php?id=1013
http://swissdelphicenter.ch/de/showcode.php?id=67


Tomok - Mo 21.04.03 10:44

Danke für den Tip, nur läuft das eine Beispiel bei mir nicht, weil ich einige der
Komponenten nicht habe und das andere ermittelt scheinbar nur lokale IPs.


Tomok - Mo 21.04.03 12:09

Ich hab es geschaft !!!!!!!!!!!!!! :D Hier ist meine Unit

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
unit IPGet;

interface

uses
  URLMon,Sysutils;

function getIP : String;

implementation

const
  IPPage = 'http://www.whatismyip.com/';
  TMPFile = 'C:\MyIP.htm';

function getIP : String;
var
  f     : Textfile;
  s1,s2 : string;
  b     : Boolean;
  i,x,y : integer;
begin
  URLDownLoadToFile(nil,IPPage,TMPFILE,0,nil);
  assignfile(f,TMPFile);
  reset(f);
  s2 := '';
  while not eof(f) do
    begin
      readln(f,s1);
      s2 := s2+s1;
    end;
  s2 := uppercase(s2);
  b  := false;
  i  := 0;
  repeat
    if (s2[i]='I')and(s2[i+1]='S'then
      begin
        x := i;
        repeat
          inc(x);
        until ((s2[x]='1')or(s2[x]='2')or(s2[x]='3')or(s2[x]='4')or(s2[x]='5')
             or(s2[x]='6')or(s2[x]='7')or(s2[x]='8')or(s2[x]='9')or(s2[x]='0'))
             or (x>=length(s2));
        y := x;
        repeat
          inc(x);
        until (not((s2[x]='1')or(s2[x]='2')or(s2[x]='3')or(s2[x]='4')or(s2[x]='5')
             or(s2[x]='6')or(s2[x]='7')or(s2[x]='8')or(s2[x]='9')or(s2[x]='0')
             or (s2[x]='.')
             or (x>=length(s2))));
        result := (copy(s2,y,x-y));
        b := true;
      end;
    inc(i);
  until b or (i>= length(s2));
  closefile(f);
  deletefile(TMPFile);
end;

end.


Moderiert von user profile iconGausi: Code- durch Delphi-Tags ersetzt


Moritz M. - Mo 21.04.03 12:12

Ja, du hast die Web-gestützte Methode benützt.


FloSch - Mo 21.04.03 12:39

Hallo,

der Source oben von Tomok ist ja ein Hammer :lol: Extrem
umständlich oder?

Habe eben auch einen mal gebastelt:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
const
  sURL = 'http://www.whatismyip.com';
  sSearchText = 'your ip is';
var
  sResult: string;
  sIP    : string;
begin
  try
    sResult := http.Get(sURL);
    sResult := LowerCase(sResult);
    sIP := Copy(sResult, pos(sSearchText, sResult) + Length(sSearchText) + 1,pos(' ', Copy(sResult, pos(sSearchText, sResult) + Length(sSearchText) + 1, length(sResult))) -1 );
    ShowMessage(sIP); // hier nun deine ip...
  except
    MessageDlg('Sie sind nicht mit dem Internet verbunden.', mtError, [mbOK], 0);
  end;


Mein Source nutzt die TidHTTP Komponente von Indy.

Grüße
Florian :roll:

Moderiert von user profile iconGausi: Code- durch Delphi-Tags ersetzt


Starfighter - Mo 21.04.03 12:56

hallo,

wo ist den die Indy Komponente?


FloSch - Mo 21.04.03 13:07

Hallo,

die Indy-Komponenten gibt es unter
http://nevrona.com/indy

Grüße
Florian :roll:


BeniSchindler - Di 22.04.03 18:11

@FloSch:

thx,thx,thx!!!

gute und schnelle lösung.

Alle anderen Lösungen die ich bisher hatte, waren umständlich und haben entweder in Windows oder in Linux nicht richtig funktioniert. Dank dieser Lösung und dank dieser Web-Site muss ich mich jetzt um ein Problem weniger kümmern. Ich weiss nicht wer auf die Idee kommt eine Website zu machen, auf der man nur seine IP sieht, es ist jedoch verdammt gut :)

Nach einem Jahr Delphiforumspause 5 min online und schon wieder ein Problem weniger.

mfg Beni.


FloSch - Di 22.04.03 18:28

Hallo,

kein Problem :lol:

Grüße
Florian :roll:


Danny W. - Mi 15.11.06 14:11

Funktioniert leider nichtmehr..die haben wohl die Seite geändert :(


Narses - Mi 15.11.06 14:50

Moin!

Zieh dir mit TIdHttp die Seite von http://www.whatismyip.com oder checkip.dyndns.org und filter doch einfach die Adresse raus, ist ja keine Kunst. ;)

cu
Narses


Danny W. - Mi 15.11.06 14:52

stimmt..das mach ich eben :)


delfiphan - Mi 15.11.06 15:01

Deine effektive IP im Internet ist vielleicht gar nicht so relevant. Wenn du nämlich hinter einem NAT bist, dann ist es häufig nicht deine eigene IP sondern eine Sammel-IP (die bringt dir zum Gamen nicht viel). Du solltest die IPs des Rechners direkt bestimmen. Dafür brauchst du auch gar keine externe Seite. Die Info aus ipconfig würde reichen. Natürlich kann man die IPs auch programmatisch bestimmen (ohne ipconfig). Falls der Rechner in einem lokalen Netz ist, kriegst du so die lokale IP raus und du kannst übers lokale Netz spielen. Bist du direkt am Internet angeschlossen, so solltest du auch die direkte IP im Internet erhalten. Mehr macht selten Sinn.


Narses - Mi 15.11.06 15:16

Moin!

Hier mal ein Ansatz:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
uses
  ..., RegExpr, IdHttp;

procedure TForm1.Button1Click(Sender: TObject);
  var
    RE: TRegExpr;
    IdHTTP: TIdHTTP;
begin
  RE := TRegExpr.Create;
  IdHttp := TIdHTTP.Create(NIL);
  try
    try
      RE.Expression := '(\d{1,3}\.){3}\d{1,3}';
      if RE.Exec(IdHTTP.Get('http://www.whatismyip.com')) then
        Edit1.Text := RE.Match[0]
      else
        Edit1.Text := 'Fehler: IP nicht vorhanden!';
    except
      Edit1.Text := 'Fehler: '+Exception(ExceptObject).Message;
    end;
  finally
    IdHTTP.Free;
    RE.Free;
  end;
end;

Aber Vorsicht:
a) Benötigt Indy und TRegExpr,
b) prüft die IP nicht auf Gültigkeit,
c) ist so nicht Proxy-tauglich (muss separat konfiguriert werden),
d) liefert dann aber ggfs. den Proxy, und nicht die eigene IP!

Ansonsten sind die Hinweise von user profile icondelfiphan natürlich noch zu beachten. ;)

cu
Narses


Manina - Mo 23.03.09 22:22

Es geht auch noch einfacher: :wink:


Delphi-Quelltext
1:
2:
3:
var CurrIP : String;
...
    CurrIP := IdHTTP.Get('http://www.whatismyip.com/automation/n09230945.asp');


Das liefert genau die nach außen sichtbare IP, ohne den ganzen Text drumherum... :wave:


Dude566 - Mo 23.03.09 22:29

Vielleicht hilft das ja weiter: KLICK MICH [http://www.delphi-treff.de/tipps/netzwerkinternet/wiki/Lokale%20IP-Adressen%20ermitteln/]


Narses - Mo 23.03.09 22:37

Moin!

user profile iconDude566 hat folgendes geschrieben Zum zitierten Posting springen:
Vielleicht hilft das ja weiter: KLICK MICH [http://www.delphi-treff.de/tipps/netzwerkinternet/wiki/Lokale%20IP-Adressen%20ermitteln/]
Du bist im falschen Film, hier geht´s um die öffentliche IP (dein Link ermittelt die lokale IP)! ;)


user profile iconManina hat folgendes geschrieben Zum zitierten Posting springen:
Es geht auch noch einfacher:
Wenn dieser Dienst zur Verfügung steht. Ansonsten ist eine flexiblere Lösung [http://www.delphi-library.de/topic_Internet+IP+ueber+Internetseite+herausfinden_74581.html] wohl der bessere Ansatz. ;)

cu
Narses


Dude566 - Mo 23.03.09 22:40

Oh, habe die Posts nur schnell überflogen und dort fiel auch einmal das Wort Lokal.


Gausi - Mo 23.03.09 22:41

*räusper* Das Datum des ersten Postings ist euch schon aufgefallen? ;-)


Manina - Mo 23.03.09 23:55

Ist das Thema deshalb weniger interessant ? :oops:

Ich z.B. hab genau sowas gesucht... (und zwar ne ganze Weile :? )

@Narses: Danke für den Flexibel-Tip !