Sprachauswahl:
Skip to main navigation Skip to main content Skip to page footer

Nachfolgend ist eine Beschreibung des Skripts zur Sicherung der Einstellungen einer Gruppe von Master‑Einheiten auf einem FTP‑Server.

Das Skript wird auf dem Betriebssystem des Nutzers (Administrators) ausgeführt. Um das Skript regelmäßig zu starten, ist der Taskplaner des Betriebssystems zu verwenden (cron, anacron – für *nix, Task Scheduler, nnCron – für Windows usw.).

Für die Ausführung des Skripts ist Python 3 erforderlich, dessen Distributiv hier heruntergeladen werden kann: https://www.python.org/downloads/ oder aus dem Repository Ihres Betriebssystems installiert werden kann.

Zur Konfiguration des Skripts müssen Sie die Parameter im Abschnitt „User settings“ festlegen:

ParameterFunktion
usernameBenutzerkontoname mit Administratorrechten auf dem Gerät
passwordBenutzerpasswort mit Administratorrechten auf dem Gerät
ftpurlAdresse des FTP‑Servers
ftpuserFTP‑Benutzername
ftppasswordFTP‑Passwort
ftpdirFTP‑Verzeichnis für Kopien der Einstellungsdateien

Die Liste der IP‑Adressen der Überwachungseinheiten wird in der Datei hosts.txt definiert, wobei pro Zeile eine IP‑Adresse steht. Beispiel:

192.168.0.193
192.168.0.194
telemetry.asia

Konfigurationsdateien werden auf dem FTP‑Server im angegebenen Verzeichnis als settings_mm.dd.yy-hh:mm:ss.vut gespeichert.

Der Text des Skripts ist unten angegeben:

vtbackup.py Gruppen‑Einstellungssicherung
#!/usr/bin/python3
#
# vtbackup.py
#
# Didactum Backup‑Einstellungsskript v.0.3
#
__author__ = 'Didactum'
import datetime
import ftplib
import hashlib
import os
import sys
import time
import urllib.request
from urllib.request import urlretrieve
import urllib.parse
from xml.dom.minidom import parse, parseString
# get Python version
# print(sys.version_info)
#-----------------------------------
#
# User settings
#
#-----------------------------------
# admin username on device
username = 'guest'
# password on device
password = 'guest' # or setup hash: h=...
hash_object = hashlib.sha1(str.encode(password))
h = hash_object.hexdigest()
#print(h)
# ftp url:
ftpurl = 'ftp.server.com'
# ftp user name:
ftpuser = 'user'
# password for ftp user:
ftppassword = 'pass'
# directory on ftp server:
ftpdir = '/savesettings/'
#-----------------------------------

#
# make filename by timestamp
#
def MakeFilename(host, prefix='settings_', ext='.vut'):
timeStamp = datetime.datetime.fromtimestamp(time.time()).strftime("%b-%d-%y-%H:%M:%S")
filename = prefix+host+'-'+timeStamp+ext
return filename
#
# auth procedure
#
def QueryAuth(host, username, h):
param = "querytype=auth&name=%s&h=%s" % (username, h)
hosturl="http://"+host+"/"

response = urllib.request.urlopen(hosturl+"engine.htm", param.encode("ascii"))
#print(response.read());
   xmldoc = parseString(response.read().decode("utf-8"))
itemlist = xmldoc.getElementsByTagName('error')
if len(itemlist) :
print("Error"+itemlist[0].attributes['type'].value)
return
else :
itemlist = xmldoc.getElementsByTagName('user')
     if len(itemlist) :
k=itemlist[0].attributes['k'].value
#print(k)
return k
#
# get settings procedure
#
def QuerySettingsGet(host, k, filename):
hosturl="http://"+host+"/"
param = ("k=%s" % (k))
urlretrieve(hosturl+"settings.htm?"+param, filename)
#
# get dump procedure
#
def QueryDumpGet(host, k):
param = "&txt=true&id=201001"
pparam = ("k=%s&%s" % (k,param))
print(pparam)
urlretrieve(hosturl+"dump.htm?"+pparam, "dump.xml")
#
# Upload to FTP server
#
def FtpUpload(ftpurl, ftpuser,ftppassword, ftpdir, filename):
# file to send
file = open(filename,'rb')
   # send the file
session = ftplib.FTP(ftpurl, ftpuser, ftppassword)
session.cwd(ftpdir)
session.storbinary('STOR '+filename, file)
session.quit()
   # close file
file.close()
#
# backup device settings
#
def HostBackup(host):
# make filename
filename = MakeFilename(host)
#print(filename)
#return

try :
# auth on device
k = QueryAuth(host, username,h)
#print(k)
       # get file settings from device
QuerySettingsGet(host, k, filename)
       # upload to ftp
FtpUpload(ftpurl, ftpuser,ftppassword, ftpdir, filename)
       # tidy
os.remove(filename)
print("%s\\t - backup succeeded" % (host))
except:
print("%s\\t - backup failed" % (host))
#
# backup settings for devices from list (text file)
#
def HostsListBackup(hosts):
with open(hosts, 'r') as f:
lines = f.readlines()
for host in lines:
HostBackup(host.rstrip('\\n'))

#
# main programm
#

HostsListBackup("hosts.txt");    

Zum Ausführen des Skripts ist Folgendes erforderlich:

> python vtbackup.py

oder

$ python3 vtbackup.py

In diesem Fall muss der Pfad zum Python‑Interpreter in der PATH‑Umgebungsvariable stehen oder Sie müssen den vollständigen Pfad in der Startzeile angeben.

Ergebnis des Skripts:

192.168.0.193     - backup succeeded
192.168.0.194     - backup failed
telemetry.asia    - backup succeeded

Diese Webseite nutzt Cookies

Diese Webseite nutzt Cookies zur Verbesserung des Erlebnisses unserer Besucher. Indem Sie weiterhin auf dieser Webseite navigieren, erklären Sie sich mit unserer Verwendung von Cookies einverstanden.

Essenzielle Cookies ermöglichen grundlegende Funktionen und sind für die einwandfreie Funktion der Website erforderlich.
Statistik Cookies erfassen Informationen anonym. Diese Informationen helfen uns zu verstehen, wie unsere Besucher unsere Website nutzen.
Marketing-Cookies werden von Drittanbietern oder Publishern verwendet, um personalisierte Werbung anzuzeigen. Sie tun dies, indem sie Besucher über Websites hinweg verfolgen.