#!/usr/bin/python3
#
# vtbackup.py
#
# Vutlan backup settings script v.0.3
#
__author__ = 'Vutlan'
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");
|