öffentliche IP-Adresse ermitteln

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Sunny
Beiträge: 290
Registriert: 19.02.2009 06:02

öffentliche IP-Adresse ermitteln

Beitrag von Sunny »

Ich nochmal, ich würde mal gern wissen, ob es möglich ist mittels PureBasic die öffentliche IP-Adresse zu ermitteln.

Also nicht: 192.168.2.1

Sondern: 84.174.XXX.XXX
Zuletzt geändert von Sunny am 11.06.2009 16:50, insgesamt 1-mal geändert.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

du kannst eine Website auslesen, wo mit php die IP geschrieben wird zB:

http://data.unionbytes.de/ip.php

auslesen kannst du zB so:

Code: Alles auswählen

Procedure.s DownloadToString(URL$, TimeOut=5000)
 Protected Event, Time, Size, String$
 Protected BufferSize = $1000
 Protected *Buffer = AllocateMemory(BufferSize)
 Protected ServerName$ = GetURLPart(URL$, #PB_URL_Site) 
 Protected ConnectionID = OpenNetworkConnection(ServerName$, 80) 
 If ConnectionID 
  SendNetworkString(ConnectionID, "GET "+URL$+" HTTP/1.0"+#LFCR$+#LFCR$) 
  Time = ElapsedMilliseconds()
  Repeat 
   Delay(10)
   Event = NetworkClientEvent(ConnectionID)
  Until Event Or ElapsedMilliseconds()-Time > TimeOut
  If Event
   Repeat
    Size = ReceiveNetworkData(ConnectionID, *Buffer, BufferSize) 
    String$ + PeekS(*Buffer, Size, #PB_Ascii) 
   Until Not Size
   Inhalt = FindString(String$, #LFCR$, 1)
   If Inhalt
    ProcedureReturn Mid(String$,Inhalt+3)
   Else
    ProcedureReturn String$
   EndIf
  EndIf
 EndIf 
EndProcedure

InitNetwork()

Debug DownloadToString("http://data.unionbytes.de/ip.php")
Zuletzt geändert von STARGÅTE am 09.07.2010 16:09, insgesamt 1-mal geändert.
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
Kurzer
Beiträge: 1617
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Beitrag von Kurzer »

Oder in kurz...

Code: Alles auswählen

EnableExplicit

Define sHeader.s, sMarker1.s, sMarker2.s, lIPPos.i, lIPLen.i

InitNetwork()

sHeader = GetHTTPHeader("http://checkip.dyndns.org")
; Debug sHeader
sMarker1 = "Current IP Address:"
sMarker2 = "<"

lIPPos = FindString(sHeader, sMarker1, 1) + Len(sMarker1)
lIPLen = FindString(sHeader, sMarker2, lIPPos) - lIPPos

Debug Mid(sHeader, lIPPos, lIPLen)
EDIT: Ich habe den Code nochmal überarbeitet, so daß man ihn auch an andere Webadressen anpassen kann. Bei dem ursprünglichen Post wurden leider auch nicht alle Stellen der IP Adresse zurückgegeben (12 statt 15).

Bei der Version oben muß in sMarker1 und sMarker2 quasi nur noch ein Stückchen vom gelesenen String (sHeader) eingetragen werden, der sich direkt vor der IP und nach der IP befindet. Dazu am besten den Kommentar vor dem ersten Debug rausnehmen und sHeader analysieren.
Zuletzt geändert von Kurzer am 11.06.2009 21:35, insgesamt 2-mal geändert.
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.12 x64, OS: Win 11 24H2 x64, Desktopscaling: 150%, CPU: I7 12700 H, RAM: 32 GB, GPU: Intel(R) Iris(R) Xe Graphics | NVIDIA GeForce RTX 3070
Useralter in 2025: 57 Jahre.
Benutzeravatar
Sunny
Beiträge: 290
Registriert: 19.02.2009 06:02

Beitrag von Sunny »

Das haut zwar bei mir irgendwie nich hin aber die Idee an sich is gut, ich hab das zuerst so gelöst:

Code: Alles auswählen

URLDownloadToFile_(0,"http://guttgame.q-soft.ch/ip.php","C:\ip.txt",0,0)
If x=1
EndIf
OpenFile(0,"C:\ip.txt")
Debug ReadString(0)
CloseFile(0)
End
allerdings gibt mein Avira ne Warnung raus, daher hab ich es danach nochmal so abgeändert:

Code: Alles auswählen

URLDownloadToFile_(0,"http://guttgame.q-soft.ch/ip.php","C:\ip.txt",0,0)
If x=1
EndIf
OpenFile(0,"C:\ip.txt")
ip$=ReadString(0)
MessageRequester("IP-Adresse",ip$)
CloseFile(0)
End
Dazu sagt Avira bei mir nichts.

Dankeschön für deine Hilfe.
Zuletzt geändert von Sunny am 11.06.2009 16:50, insgesamt 1-mal geändert.
Benutzeravatar
Sunny
Beiträge: 290
Registriert: 19.02.2009 06:02

Beitrag von Sunny »

Oder in kurz...

Code: Alles auswählen

InitNetwork()

Header$ = GetHTTPHeader("http://checkip.dyndns.org")
Debug Mid(Header$, FindString(Header$, "Current IP Address:", 1) + 20, 12) 
Haut bei mir auch nich hin, ich glaub meine Version von PureBasic is schon zu veraltet.
Zuletzt geändert von Sunny am 11.06.2009 16:50, insgesamt 1-mal geändert.
Benutzeravatar
Kurzer
Beiträge: 1617
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Beitrag von Kurzer »

Was genau heißt "haut nicht hin"?
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.12 x64, OS: Win 11 24H2 x64, Desktopscaling: 150%, CPU: I7 12700 H, RAM: 32 GB, GPU: Intel(R) Iris(R) Xe Graphics | NVIDIA GeForce RTX 3070
Useralter in 2025: 57 Jahre.
Benutzeravatar
Sunny
Beiträge: 290
Registriert: 19.02.2009 06:02

Beitrag von Sunny »

Bei mir kommt folgende Fehlermeldung:

Line 3: GetHTTPHeader() is not a function, array, macro or linked list
Zuletzt geändert von Sunny am 11.06.2009 16:49, insgesamt 1-mal geändert.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

wäre gut wenn du dann in deine signatur schreiben würdest welche PB-Version du besitzt.
Oder noch besser gleich zur neusten updatest
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
Sunny
Beiträge: 290
Registriert: 19.02.2009 06:02

Beitrag von Sunny »

OK, Version in Signatur eingefügt.

Mal so nebenbei, wie krieg ich eigentlich diese hübschen Bildchen in meiner Signatur rein, die zeigen welche PB-Version ich hab oder ob ich Windows XP oder Vista hab und Welches SP usw.
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag von Andesdaf »

Sunny hat geschrieben:Mal so nebenbei, wie krieg ich eigentlich diese hübschen Bildchen in meiner Signatur rein, die zeigen welche PB-Version ich hab oder ob ich Windows XP oder Vista hab und Welches SP usw.
http://www.purebasic.fr/german/viewtopic.php?t=15953
Win11 x64 | PB 6.20
Antworten