Buchempfehlung
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Umfassend, aber leicht verständlich führt dieses Buch in die Programmierung von ATMEL AVR Mikrocontrollern ein. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Code-Beispiel

Code-Beispiele » Internet und Netzwerke

WAN-IP aus Router auslesen

Lizenz:Erster Autor:Letzte Bearbeitung:
k. A.Redakteurytwinky 16.08.2012

Hi,
das war einfacher als gedacht..
Ich hatte schon mehrere Versuche hinter mir, einen Server zu finden, der mir meine WAN-IP liefert..
..und zwar NUR die WAN-IP und keine Abonnements usw. Ich war schon nahe dran, mir mit TraceRoute
weiterhelfen zu wollen, da fand ich die Lösung(für mich): Einfach die Startseite vom Router
auslesen. Dies funktioniert, weil die easy.box auf der Startseite die WAN-IP anzeigt.
Wget und curl fielen als Hilfsmittel aus, ich wollte es ja in FreeBASIC pur..
Freundlicherweise hat FB-portal hier weiterhelfen können, dieses Beispiel mußte ich nur noch
etwas ändern und schon kann ich zu jederzeit meine WAN-IP auslesen.
Sogar, wenn mein Standard-Gateway OFF-Line ist, geht das, da der Router ja immer ON-Line ist..

Wichtig: Das Vorgehen funktioniert nur bei ganz bestimmten Routern (EasyBox). Das heißt, man kann sich als Entwickler nicht darauf verlassen, dass die Methode beim späteren Nutzer der Software auch funktioniert. Dies hängt davon ab, welches Router-Modell der Nutzer in Verwendung hat. Soll Ihre Software also für eine breitere Verwendung bereitgestellt werden, bei der es auf Kompatibilität ankommt, müssen andere Vorgehensweisen verwendet werden.

Genug der Vorrede, hier ist der Code:

#include "file.bi"
Declare Function LoadAll(DateiName As String) As String
Declare Function GetFAttr Lib "kernel32.dll" Alias "GetFileAttributesA" _
    (lpFileName As String) As Integer
Dim URLDownloadToFile As Function ( _
  ByVal pCaller As Long, _
  ByVal szURL As zString Ptr, _
  ByVal szFileName As zString Ptr, _
  ByVal dwReserved As Long, _
  ByVal lpfnCB As Long) As Long

Var sURL="http://easy.box", sFile=Environ("Tmp") &"\login.stm"
Var lR=0, i=0, Msg=*IIf(InStr(lcase(Command), "/t"), @"WanIP:", @"")
Dim library As Any Ptr
If InStr(Command, "/?") Then
    Msg=!"GetWanIP.Bas 0.99 ¸ 2012 by ytwinky, MD\nAufruf:\nGetWanIP [/?][/t][/w]\nwobei\n" &_
            !"/? einzige Version vom Hilfeaufruf\n/t Text mit ausgeben(WanIP:)\n/w nach Ausgabe warten..\n" &Msg
EndIf
library=dylibload("urlmon.dll" )
URLDownloadToFile=dylibsymbol(library, "URLDownloadToFileA" )
lR=URLDownloadToFile(0, sURL, sFile, 0, 0)
DylibFree library
If lR Then
    Msg="Fehler beim Download von " &sURL &".."
Else
    sURL=LoadAll(sFile)
    Kill(sFile)
    i=InStr(sURL, "wan_ip=")+8
    Msg &=Mid(sURL, i, InStr(i, sURL, ";")-i-1)
EndIf
Print Msg;
If InStr(lcase(command), "/w") Then GetKey
End lr<>0

Function LoadAll(DateiName As String) As String
  Var DNr=FreeFile, g=GetFAttr(DateiName) 'Variablen vorbelegen..
  Dim Puffer As String Ptr
  If FILEEXISTS(DateiName) Then 'ist Datei vorhanden und kein Verzeichnis
    Open DateiName For Binary As #DNr 'Datei binär öffnen
      g=Lof(DNr) 'Dateigröße ermitteln
      Puffer=cAllocate(g)'Puffer reservieren
      *Puffer=Space(g)  'Puffer vorbelegen
      Get #DNr,, *Puffer  'gesamt Datei inPuffer ablegen
    Close #DNr 'Datei schließen
    Function=*Puffer 'Funktionswert zuweisen
    DeAllocate Puffer 'Puffer im Speicher freigeben, besser isses..
  Else 'Ooops, da war was falsch
    If g<0 Then Return DateiName &" fehlt.."
    If (g And &h10)<>0 Then Return DateiName &" ist ein Verzeichnis.."
    Function="Ooops, mit " &DateiName &"stimmt was nich.."
  End If
End Function

Wichtig ist nur der Startparameter /? weil er (als einziger) die Hilfeseite aufruft..
Gruß
ytwinky


Zusätzliche Informationen und Funktionen
  • Das Code-Beispiel wurde am 09.08.2012 von Redakteurytwinky angelegt.
  • Die aktuellste Version wurde am 16.08.2012 von AdministratorSebastian gespeichert.
  Bearbeiten Bearbeiten  

  Versionen Versionen