Если Вы управляете неким количеством оборудования, то рано или поздно приходите к вызову, что настройки необходимо резервировать.
Причем в автоматическом режиме.
Сегодня мы поговорим по то, каким образом решить данную задачу для шлюзов компании D-Link типа DVG-500xS.
Шлюзы эти достаточно часто используются для организации небольших выносов (уд. склад, магазин, отделение и др.).
Однако мало того, что у данных шлюзов файл настроек имеет бинарный вид, штатной возможности "вытянуть" его не предусмотрено.
Но это проблема вполне решаемая.
Данный шлюз может отдавать настройки через Web интерфейс, а значит с помощью небольшого Python скрипта мы можем эти настройки получить в автоматическом режиме:
#!/usr/local/bin/python
# import modules
import sys
import urllib2
#get dlink config
def get_dlink_config(_realm,_user,_password,_url,_router):
try:
_auth_handler = urllib2.HTTPDigestAuthHandler()
_auth_handler.add_password(realm=_realm,uri=_url,user=_user,passwd=_password)
_source = urllib2.build_opener(_auth_handler)
urllib2.install_opener(_source)
_res = urllib2.urlopen(_url)
_res = urllib2.urlopen("http://"+_router+"/backup.profile")
return _res.read()
except:
print "ERR: We were not getting config from device"
sys.exit(1)
# write ALERT to txt file
def txt_alert(_cfg_file):
_txt_alert_file = open(_cfg_file, 'w')
_txt_alert_file.write("Backup in binaryconf file")
_txt_alert_file.close()
# write bin config file
def bin_config_write(_cfg_file_bin,_body):
_bin_config = open(_cfg_file_bin, 'w')
_bin_config.write(_body)
_bin_config.close()
def main():
# variables
_user = "Admin"
_password = "XXXX"
_realm = "IAD-Configuration"
# get variables
if len(sys.argv) < 2:
print 'No Hostname'
sys.exit()
_router = sys.argv[1]
_url = "http://"+_router+"/otgw.cgi?PAGE=ConfigBackupForm"
_cfg_file = "/configs_path/"+_router+".new"
_cfg_file_bin = "/binary_configs_path/"+_router
# get body config
_config_body = get_dlink_config(_realm,_user,_password,_url,_router)
# write alert
txt_alert(_cfg_file)
# write body config
bin_config_write(_cfg_file_bin,_config_body)
sys.exit()
if __name__ == "__main__":
main()