Code-Beispiel
WAN-IP aus Router auslesen
Lizenz: | Erster Autor: | Letzte Bearbeitung: |
k. A. | ytwinky | 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 ytwinky angelegt.
- Die aktuellste Version wurde am 16.08.2012 von Sebastian gespeichert.
|
|