Seite 1 von 4

getInternetIP() — Nur 14 Zeilen; crossplattform

Verfasst: 18.09.2008 15:36
von AND51
Hallo!

Wenn man schon immer mal die Internet IP rauskriegen wollte, dann geht das hiermit:

Code: Alles auswählen

InitNetwork() 

Procedure getInternetIPv4(URL$, TempFileName.s="getinternetipv4.tmp") 
   Protected file, bom, ipv4=CreateRegularExpression(#PB_Any, "((1|2)?\d\d?\.){3}(1|2)?\d\d?"), Dim ip.s(0) 
   If ReceiveHTTPFile(URL$, GetTemporaryDirectory()+TempFileName) 
      file=ReadFile(#PB_Any, GetTemporaryDirectory()+TempFileName) 
      If file 
         bom=ReadStringFormat(file) 
         Repeat : Until ExtractRegularExpression(ipv4, ReadString(file, bom), ip()) Or Eof(file) 
         CloseFile(file) 
         DeleteFile(GetTemporaryDirectory()+TempFileName) 
      EndIf 
   EndIf 
   FreeRegularExpression(ipv4) 
   ProcedureReturn MakeIPAddress(Val(StringField(ip(0), 1, ".")), Val(StringField(ip(0), 2, ".")), Val(StringField(ip(0), 3, ".")), Val(StringField(ip(0), 4, "."))) 
EndProcedure 

ip=getInternetIPv4("http://www.and51.de/cgi-bin/ip.pl/") 
Debug IPString(ip)
Es wird eine Webseite (z. B. www.wieistmeineip.de) heruntergeladen und mit RegExp nach einer IP Adresse durchsucht. Die temporäre Datei wird wieder gelöscht und die ggf. gefundene IP-Adresse zurückgegeben.


Ohne API,
lauffähig auf Windows, Linux, Mac.
Die Internetseite eines entsprechenden Dienstanbieters kann frei gewählt werden!
Gibt 0 zurück, wenn die Datei nicht runtergeladen oder geöffnet oder wenn keine IP gefunden wurde.

Verfasst: 18.09.2008 15:44
von STARGÅTE
hmm...
0.0.0.0
was muss ich beachten ?

bzw was muss ich ändern ?

Verfasst: 18.09.2008 15:46
von ts-soft
Getestet unter Vista 64:
Debugger Ausgabe hat geschrieben:0.0.0.0
Merkwürdiges Ergebnis :o

Verfasst: 18.09.2008 15:47
von AND51
Jetzt müsste es gehen, habe den regulären Ausdruck korrigiert und das vergessene FreeRegularExpression() hinzugefügt, was unnötig wäre, wenn man mit Static oder Shared arbeiten würde. Dann gäbs aber Gemecker von Kiffi ^^

Verfasst: 18.09.2008 15:50
von ts-soft
AND51 hat geschrieben:Jetzt müsste es gehen, habe den regulären Ausdruck korrigiert und das vergessene FreeRegularExpression() hinzugefügt, was unnötig wäre, wenn man mit Static oder Shared arbeiten würde. Dann gäbs aber Gemecker von Kiffi ^^
Eine Änderung am Code, die eine Änderung am Ergebnis ergibt wäre mir lieber :wink:

Verfasst: 18.09.2008 15:50
von STARGÅTE
ne leider nicht ...

wäre es nicht einfacher n php datei zu schreiben ?

Code: Alles auswählen

<?php
echo $_SERVER['REMOTE_ADDR'];
?>
dann brauchst du keinerlei filterungen vornehmen, sondern einfach den zurückgegebenen String nehmen ...

Verfasst: 18.09.2008 15:56
von AND51
> Eine Änderung am Code, die eine Änderung am Ergebnis ergibt wäre mir lieber
Also bei mir geht es. Ich bekomme "84.135.110.210" zurück.

Übrigens ist es wichtig, dass das Pattern "x.x.x.x" auf eine IP zutrifft. Nicht z. B. auf eine Versionsnummer die noch mit irgendwo (vor der IP) auf der Seite steht.

> dann brauchst du keinerlei filterungen vornehmen
Das ist ja gerade der Sinn dieses Codes, dass man sich die Seite frei aussuchen kann. Dank RegExp ist der Code flexibel, sodass (fast) jede gewünschte Seite genommen werden kann.
Natürlich kannst du den Code umschreiben, sodass er mit deiner PHP-Datei funktioniert.

@ Topic:
Woran könnte es liegen, dass ihr noch kein gültiges Ergebnis erhaltet? Der reguläre Ausdruck ist doch korrekt?
Was kriegt ihr denn für'n ergebnis? Könntet ihr auch mal die Variable "ip" posten?
Und könnt ihr nach der Repeat-Schleife mal den Inhalt des Arrays posten? Also das erste Array-Feld ip(0) ? Nehmt ihr auch die Seite www.wieistmeineip.de oder welche?

Verfasst: 18.09.2008 16:03
von STARGÅTE
der rückgabewert ist schon 0 :cry:
und ja ich verwende genau deinen code

Verfasst: 18.09.2008 16:04
von ts-soft
Also original mit obigem code, hab nur "Debug "ip: " + Str(ip)" hinten angefügt:
Debugger Ausgabe hat geschrieben:0.0.0.0
ip: 0
Was soll ich noch sagen:
Zwei flinke Boxer jagen die quirlige Eva und ihren Mops durch Sylt. Franz jagt im komplett verwahrlosten Taxi quer durch Bayern. Zwölf Boxkämpfer jagen Viktor quer über den großen Sylter Deich. Vogel Quax zwickt Johnys Pferd Bim. Sylvia wagt quick den Jux bei Pforzheim. Polyfon zwitschernd aßen Mäxchens Vögel Rüben,

Verfasst: 18.09.2008 16:11
von AND51
So, ich habe mal meine eigene IP-Seite eingesetzt und außerdem den BOM-Flag bei ReadString() eingesetzt. Das hatte ich vergessen.

Ich habe meinen Code mit 32-Bit und 64-Bit getestet, mit und ohne Unicode-Unterstützung, es funktioniert immer.

Geht es bei euch auch jetzt?