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
alter Mann
Beiträge: 201
Registriert: 29.08.2008 09:13
Wohnort: hinterm Mond

Beitrag von alter Mann »

@AND51:
geht bei mir nur bei bestimmen WEB-Seiten
z.B. nicht bei www.hainsbergersv.de

@STARGATE
geht z.B. unter Vista Prof 64 als 32-bit Exe
Win11 64Bit / PB 6.0
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 »

STARGÅTE Code goes Unicode-compatible

Code: Alles auswählen

InitNetwork()

Procedure.s InternetIP()
 Protected Event, Zeit, Buffer$ = Space(1024)
 Protected URL$ = "http://guttgame.q-soft.ch/ip.php"
 Protected ConnectionID = OpenNetworkConnection(GetURLPart(URL$, #PB_URL_Site), 80)
 If ConnectionID
  SendNetworkString(ConnectionID, "GET "+URL$+" HTTP/1.0"+#LFCR$+#LFCR$)
  Zeit = ElapsedMilliseconds()
  Repeat
   Delay(1)
   Event = NetworkClientEvent(ConnectionID)
  Until Event Or ElapsedMilliseconds()-Zeit > 3000
  If Event = #PB_NetworkEvent_Data
   Size = ReceiveNetworkData(ConnectionID, @Buffer$, 1024)
   Buffer$ = PeekS(@Buffer$, -1, #PB_Ascii)
   ProcedureReturn Mid(Buffer$,FindString(Left(Buffer$, Size), #LFCR$, 1)+3)
  EndIf
 EndIf
EndProcedure

Debug InternetIP()
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 »

Du solltest dich allerdings schon umgewöhnen und zwar schnell.
Und zwar nicht nur an PB 4.xx, sondern wie wir alle auch an 64-Bit (falls du das brauchst).
Und das ist wirklich nicht böse gemeint, aber so eine Prozedur wie deine macht eine sehr schlechte Figur, besonders für Anfänger (nicht vergessen, wir sind hier im Ich-kanns-und-du-nicht-Subforum!!).
Deine Prozedur ist also wirklich nur für den Heimbedarf.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

alter Mann hat geschrieben:@AND51:
geht bei mir nur bei bestimmen WEB-Seiten
z.B. nicht bei www.hainsbergersv.de
Nun, das geht schon; gibt ja auch 0 zurück, weil die Seite keine IP enthält. Habe mir den Quelltext mal manuell im Editor angesehen. Nichts. Keine IP da.
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 »

jo And51 ist mir ja klar ;-)

nur trotzdem würde ich dir auch empfehlen das ganze ohne Temp-Datei zu lösen...
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 »

Ja, das würde ich auch gern tun, aber noch gibt es keinen PB-Befehl, der mir eine Webseite nur in den Speicher holt.
Unverständlich, denn Fred hätte spielend einfach eine Kopie dieses befehls entsprechend in PB einbauen können.

Sobald es einen derartigen Befehl gibt, kann man diese Prozedur sofort umstellen.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
HeX0R
Beiträge: 3040
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag von HeX0R »

Code: Alles auswählen

InitNetwork()
Debug RemoveString(StringField(GetHTTPHeader("http://h3x0r.ath.cx/Sonstiges/ShowMyIp2.php"), 5, #CR$), #LF$ + "Location: ")
:mrgreen:
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Die Möglichkeit die IP durch dirty-Tricks in den Header zu schleusen hat außer dir keiner.
Nur Leute mit einem eigenen PHP/Perl-fähigem Webspace.

Somit nur für wenige interessant. Das ganze auf einem Homeserver...

Aber gute Idee mein Freund! Sehr einfallsreich, die Daten im Header zu verstecken, damit mit den bisherigen mickrigen PB-Befehlen das ganze ohne Zwischenspeichern funktioniert. Aber wenn du schon deine eigene Seite hast, dann kannst du doch sicher auch einen eigenen HTTP-Header setzen, oder?

Zum Beispiel

Code: Alles auswählen

HTTP/1.0 204 No Content
ClientIP: "192.168.2.1"
Connection: Close
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag von ZeHa »

AND51 hat geschrieben:Die Möglichkeit die IP durch dirty-Tricks in den Header zu schleusen hat außer dir keiner.
Nur Leute mit
einem eigenen PHP/Perl-fähigem Webspace.
Warum so patzig?
Es gibt wahrlich genug Leute, die einen PHP-fähigen Webspace haben, und die, die es nicht haben, aber Programme schreiben und diese irgendwann mal veröffentlichen wollen, die können sich auch irgendwann einen zulegen. Daher ist der Vorschlag doch auch berechtigt (sagt ja keiner, daß das die einzige gültige Lösung ist).

Zudem gibt es hier im Forum ein paar User, die PHP-fähigen Webspace kostenlos zur Verfügung stellen. Da könnte man locker eine "What is my IP"-Seite drauftun, die nix anderes tut, als die IP zurückzuliefern - eben genau für diejenigen hier im Forum, die das benötigen.
Bild     Bild

ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Patzig? So war's nicht gemeint.
Jemand, der seine eigene Internet IP braucht, kommt auch mit einer selbst erstellten Webseite dran, da hast du Recht. Ich sage auch nicht, dass seine Lösung unberechtigt sei, sondern habe ihm einen Verbesserungsvorschlag gegeben.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Antworten