So ich habe mir gedacht, ich mache es mal für no-ip.org und habe auch fleißig Kommentare in das Script gehämmert.
Spoiler anzeigen
#NoTrayIcon ; <-- Kein Trayicon anzeigen
#cs ----------------------------------------------------------------------------
AutoIt Version: 3.2.12.0
Author: McPoldy
Script Function:
Diese Script soll prüfen ob unsere derzeitige IP (z.B. der Zuhause) mit
der IP bei http://www.no-ip.org übereinstimmt.
Folgende Schritte sind dazu nötig:
1. Prüfen welche IP aktuell bei no-ip.org hinterlegt ist
2. Prüfen welche IP aktuell bei uns als öffentliche IP da ist
3. Ggf. die IP auf no-ip.org updaten.
#ce ----------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]; Includes
#include <IE.au3>
#include <Inet.au3>
#include <file.au3>
#Include <Constants.au3>
#include <GUIConstants.au3>
#include <WindowsConstants.au3>
; <-- ENDE
; Optionen
Opt("TrayMenuMode",1)
Opt("TrayOnEventMode",1)
; <-- ENDE
; Konstanten
Const $bolRunEndless = True ; <-- Soll das Skript ständig laufen
Const $intIntervall = 15 ; <-- Alle wieviel Minuten soll geprüft werden
Const $bolLog = True ; <-- Soll eine Logdatei erstellt werden
Const $strLogFile = @ScriptDir & '\ipudater.log' ; <-- Pfad zum Logfile
; <-- ENDE
; Zugangsdaten zu no-ip.org
Local $strUser = 'xxxxxxxxxxxxxxxxxxxxxxxx' ; <-- Anmeldename bei No-IP.org
Local $strPwd = 'xxxxx' ; <-- Unser Passwort
Local $strDomain = 'xxxxxxxxxxxxxxxx' ; <-- Unsere Domain bei No-IP.org
; <-- ENDE
; Dekleration allgemeiner Variablen
Local $strUpdateUrl = '' ; <-- Hier wird nachher die URL gespeichert, die wir benötigen um unsere IP zu aktualisieren
Local $strLocalIP = '' ; <-- Hier wird unsere derzeitige lokale (vom ISP zugewiesene) IP gespeichert
Local $strRemoteIP = '' ; <-- Hier wird unsere derzeitige remote (bei No-IP hinterlegte) IP gespeichert
Local $strLastCheck = '' ; <-- Hier wird gespeichert wann das letzte mal geprüft wurde
; <-- ENDE
; Allgemeiner Teil
_Log("Programm gestartet") ; <-- Programm gestartet Log Eintrag
_GetIPs() ; <-- Hole IP`s
If $bolRunEndless Then ; <-- Prüfe ob Endlosbetrieb aktiv ist
_CreateTray() ; <-- Tray Menü anzeigen
AdlibEnable("_Main",(1000 * 60 * $intIntervall)) ; <-- Setze Adlib mit angabe der Minuten in der geprüfter werden soll
While 1
Sleep(200)
WEnd
Else ; <-- Wenn nur einmal ausgeführt werden soll dann mache hier weiter
_Main()
_Exit()
EndIf
; <-- ENDE
; Die Hauptfunktion die in bestimmten Abständen aufgerufen wird
Func _Main()
_getIps() ; <-- Hole aktuelle IP`s
If $strLocalIP <> $strRemoteIP Then _Update($strLocalIP) ; <-- Falls die IP`s unterschiedlich sind führe ein Update aus
EndFunc
; <-- ENDE
; Tray-Menü Erstellung
Func _CreateTray()
$infoitem = TrayCreateItem("Info Anzeige")
TrayItemSetOnEvent(-1,"_ShowInfo")
$logitem = TrayCreateItem("Log Anzeige")
TrayItemSetOnEvent(-1,"_openLog")
TrayCreateItem("")
$exititem = TrayCreateItem("Exit")
TrayItemSetOnEvent(-1,"_Exit")
TraySetState()
TraySetClick(3)
EndFunc
; <--Ende
; Hier werden die beiden IP`s geholt
Func _getIPs()
TCPStartup() ; <-- TCP starten, wird für TCPNameToIP benötigt
$strLocalIP = _GetIP() ; <-- Unsere vom ISP zugewiesene IP
_Log("Folgende lokale IP wurde ermittelt: " & $strLocalIP)
$strRemoteIP = TCPNameToIP($strDomain) ; <-- Unsere IP bei No-IP
_Log("Folgende remote IP wurde ermittelt: " & $strLocalIP)
TCPShutdown() ; <-- TCP wieder stoppen
EndFunc
; <-- ENDE
; Hier wird das Update durchgeführt
Func _Update($Ip,$User = $strUser,$Pwd = $strPwd,$Domain = $strDomain)
_Log("Update wurde gestartet....")
$strUpdateUrl = StringFormat('http://dynupdate.no-ip.com/dns?username=%s&password=%s&hostname=%s&ip=%s',$User,$Pwd,$Domain,$Ip) ; <-- Unsere Update URL
$oIE = _IECreate ($strUpdateUrl)
If _IEBodyReadText($oIE) = StringFormat("%s:0",$strDomain) Or _IEBodyReadText($oIE) = StringFormat("%s:1",$strDomain) Then
_Log("Update erfolgreich")
Else
_Log("Update NICHT erfolgreich")
EndIf
EndFunc
; <-- ENDE
; Hier wird das Logfile geschrieben
Func _Log($text)
If $bolLog Then ; <-- Soll geloggt werden, siehe Konstanten
$strLastCheck = StringFormat("%04d.%02d.%02d - %02d:%02d:%02d",@YEAR,@MON,@MDAY,@HOUR,@MIN,@SEC) ; <-- Aktuelles Datum
_FileWriteLog($strLogFile,$text,0) ; <-- Schreiben der Log Datei
EndIf
EndFunc
; <-- ENDE
; Logdatei im Default Texteditor öffnen
Func _openLog()
ShellExecute($strLogFile)
EndFunc
; <-- ENDE
; Fenster für Infoanzeige
Func _ShowInfo()
#Region ### START Koda GUI section ### Form=C:\Dokumente und Einstellungen\Jens\Desktop\ipupdater.kxf
$frmMain = GUICreate("frmMain", 520, 114, -1, -1, BitOR($WS_POPUP,$WS_CLIPSIBLINGS))
GUISetBkColor(0x9DB9EB)
$lblLine01 = GUICtrlCreateLabel("", 0, 24, 520, 2)
GUICtrlSetBkColor(-1, 0x000000)
$lblTitel = GUICtrlCreateLabel("STATUS - Übersicht IP Updater", 180, 4, 204, 17)
GUICtrlSetFont(-1, 8, 800, 4, "Verdana")
$lblLokalIP = GUICtrlCreateLabel("Lokale IP: " & $strLocalIP, 25, 38, 240, 17)
GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
$lblRemoteIP = GUICtrlCreateLabel("Remote IP: " & $strRemoteIP, 275, 38, 240, 25)
GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
$lblLine02 = GUICtrlCreateLabel("", 0, 70, 520, 2)
GUICtrlSetBkColor(-1, 0x000000)
$lblLastCheck = GUICtrlCreateLabel("Letzte Prüfung: " & $strLastCheck, 100, 78, 312, 25)
GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
$lblLine03 = GUICtrlCreateLabel("lblLine03", 0, 111, 520, 2)
GUICtrlSetBkColor(-1, 0x000000)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
GUIDelete($frmMain)
ExitLoop
EndSwitch
WEnd
EndFunc
; <-- ENDE
; Diese Funktion wird beim beenden des Scripts ausgeführt
Func _Exit()
If $bolRunEndless Then AdlibDisable() ; <-- Falls Entlosbetrieb, wird Adlib deaktiviert
_Log("Letze eigene IP: " & $strLocalIP) ; <-- Abschliessende Log Einträge
_Log("Letze remote IP: " & $strRemoteIP) ; <-- Abschliessende Log Einträge
_Log("Zuletzt geprüft: " & $strLastCheck) ; <-- Abschliessende Log Einträge
_Log("Programm wird nun beendet.") ; <-- Abschliessende Log Einträge
Exit 0
EndFunc