Seite 1 von 2

öffentliche IP-Adresse ermitteln

Verfasst: 11.06.2009 14:13
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

Verfasst: 11.06.2009 14:37
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")

Verfasst: 11.06.2009 15:03
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.

Verfasst: 11.06.2009 15:05
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.

Verfasst: 11.06.2009 15:07
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.

Verfasst: 11.06.2009 15:09
von Kurzer
Was genau heißt "haut nicht hin"?

Verfasst: 11.06.2009 15:22
von Sunny
Bei mir kommt folgende Fehlermeldung:

Line 3: GetHTTPHeader() is not a function, array, macro or linked list

Verfasst: 11.06.2009 15:26
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

Verfasst: 11.06.2009 16:48
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.

Verfasst: 11.06.2009 17:06
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