Online IP

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

Pummelie

Betreff: Online IP

BeitragSo, Sep 06, 2009 14:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier ist male eine Funktion mit der man seine Online IP abfragen kann, ich weiß das es das schon gibt, doch hierfür brauch man keinen php fähigen webspace.

Edit 6.8.2010: So, habe mal was eigens schnellers gemacht, der Server dazu ist (fast) immer on:
BlitzBasic: [AUSKLAPPEN]
Function GetIP$()
Local server$="pummelie.de",port%=5897
Local IP_Stream=OpenTCPStream(server$,port%)
If IP_Stream=0 Then Return(0)
Return(ReadString$(IP_Stream))
End Function

Verwengungsbeispiel:
BlitzBasic: [AUSKLAPPEN]
AppTitle("Meine IP")
Graphics(640,480,16,2)
SetBuffer(BackBuffer())
Color(255,255,255)
Text(0,0,"Ermittle IP....")
Flip(1)
Local ip$=GetIP$(),CPU_Timer=CreateTimer(25)
If ip$=0 Then
Color(255,0,0)
Cls
Text(0,0,"Die Anfrage konnte nicht gestellt werden!")
Flip(1)
Local error_ms=MilliSecs()+2000
Repeat
WaitTimer(CPU_Timer)
Until MilliSecs()>error_ms
End
EndIf
Color(0,255,0)
Cls
Text(0,0,"Ihre IP ist: "+ip$)
Flip(1)
Local ms=MilliSecs()+3000
Repeat
WaitTimer(CPU_Timer)
Until MilliSecs()>ms
End

Function GetIP$()
Local server$="pummelie.de",port%=5897
Local IP_Stream=OpenTCPStream(server$,port%)
If IP_Stream=0 Then Return(0)
Return(ReadString$(IP_Stream))
End Function


BlitzBasic: [AUSKLAPPEN]

Function CheckOnlineIP$()
Local server$="www.myip.ch",rdline$,ip$,iips
Local ipstream = OpenTCPStream(server$,80)
If ipstream=0 Then Return(0)
WriteLine ipstream, "GET / HTTP 1.0"
WriteLine ipstream, "Host: "+server$
WriteLine ipstream, ""
Repeat
rdline$ = ReadLine(ipstream)
If Left(rdline$,6) = Chr(60)+"html"+Chr(62) Then
ip$ = Right(rdline$,30)
iips = 29
Repeat
Select Left(ip$,1)
Case ":"
ip$ = Right(ip$,iips)
iips = iips-1
Case " "
ip$ = Right(ip$,iips)
iips = iips-1
Case "s"
ip$ = Right(ip$,iips)
iips = iips-1
Case "e"
ip$ = Right(ip$,iips)
iips = iips-1
Case "r"
ip$ = Right(ip$,iips)
iips = iips-1
Case "d"
ip$ = Right(ip$,iips)
iips = iips-1
Case "A"
ip$ = Right(ip$,iips)
iips = iips-1
Default
Exit
End Select
Forever
Exit
EndIf
Forever
ip$ = Left(ip$,Len(ip$)-14)
DebugLog "Deine IP ist: "+ip$
CloseTCPStream(ipstream)
Return(ip$)
End Function

Als kleines Beispiel:
BlitzBasic: [AUSKLAPPEN]
AppTitle("Wie ist meine IP?")
Graphics(640,480,32,2)
SetBuffer(BackBuffer())
Local IP$=CheckOnlineIP$()
If IP=0 Then RuntimeError("Keine Verbindung zum Internet hergestellt"+Chr(13)+"Starten sie ihren W-Lan Adapter, oder schließen sie ein Netkabel an!")
Local timer=CreateTimer(40)
Repeat
Cls
Text(320,240,"Ihre IP ist: "+IP,1,1)
Flip 0
WaitTimer timer
Until KeyDown(1)
End


Wozu ist das gut?
in Netzprogrammen, kann man sicher immer die eigene IP brauchen Wink

Brauch ich noch etwas dazu
Nein, außer ner Internetleitung natürlich
Diese Funktion greift auf einen unabhängigen Server zurück, sollte dieser mal nicht mehr da sein, werde ich sie natürlich umschreiben!


Edit: Der Fehler wurde entfernt, danke an Nicdel

Edit: letzt aktualiesierung 6.8.2010
  • Zuletzt bearbeitet von Pummelie am Fr, Aug 06, 2010 20:38, insgesamt 11-mal bearbeitet

Nicdel

BeitragSo, Sep 06, 2009 14:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Recht nützlich. Es ist aber ein Fehler drin:

Statt
Code: [AUSKLAPPEN]
Function CheckOnlineIP()

sollte es so sein
Code: [AUSKLAPPEN]
Function CheckOnlineIP$()


Sonst wird nur die erste Ziffer zurückgegeben.
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

Eingeproggt

BeitragSo, Sep 06, 2009 14:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hoffe, die Admins haben nichts dagegen dass ich meine Lösung veröffentliche, die ich mit eurer Hilfe mal aufgestellt hab.

BlitzBasic: [AUSKLAPPEN]
Function GetWebIP$()
Local bytesToRead,header$,reply$
Local www=OpenTCPStream("www.chaos-interactive.de",80)
If www Then
WriteLine www,"GET /ip.php HTTP/1.1"
WriteLine www,"Host: www.chaos-interactive.de"
WriteLine www,"UserAgent: BlitzBasic"
WriteLine www,"Accept: */*"
WriteLine www,""
Repeat
header$=ReadLine(www)
reply$=""
pos=Instr(header$,": ")
If pos Then reply$=Left(header$,pos+1)
If Lower(reply$)="content-length: " Then
bytesToRead=Right(header$,Len(header$)-Len(reply$))
EndIf
Until header$="" Or (Eof(www))
If bytesToRead=0 Then
DebugLog "Anfrage an chaos-interactive schlug fehl"
CloseTCPStream www
Return ""
EndIf
Return ReadLine(www)
EndIf
End Function


Geht ganz ohne parsen Smile
Achja, sagmal Pummelie, ist die Angabge des HTTP-Protokolls bei dir nicht iwie falsch? Ich dachte das schreibt man "HTTP/1.0" und nicht "HTTP 1.0"

mfG, Christoph.
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

Pummelie

BeitragSo, Sep 06, 2009 14:45
Antworten mit Zitat
Benutzer-Profile anzeigen
beides geht normalerweise beides.

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group