getInternetIP() — Nur 14 Zeilen; crossplattform

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

getInternetIP() — Nur 14 Zeilen; crossplattform

Beitrag 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.
Zuletzt geändert von AND51 am 18.09.2008 16:10, insgesamt 2-mal geändert.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

hmm...
0.0.0.0
was muss ich beachten ?

bzw was muss ich ändern ?
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Getestet unter Vista 64:
Debugger Ausgabe hat geschrieben:0.0.0.0
Merkwürdiges Ergebnis :o
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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 ^^
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag 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 ...
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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?
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

der rückgabewert ist schon 0 :cry:
und ja ich verwende genau deinen code
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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,
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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?
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Antworten