背景:公司Symantec SEP 11.0防病毒系统的病毒库更新到2015-1-5之后不能自动更新了(厂家做了限制),但Sep 12.1是每年要买license的,所以不太想升级到12.1。admin管理员组文章数量:1564631
官网FTP网站(ftp://ftp.symantec/public/english_us_canada/antivirus_definitions/norton_antivirus/jdb/)上的.jdb离线更新包还可以手工下载,就是麻烦了些。
同事想让我写个脚本,能自动下载当天最新的一个包,放在SEPM的更新文件夹下。
问题:此FTP路径下的几个更新包名字每天都在变化,怎样才能做到用脚本下载最新的一个文件?
版本1
1、获取当前ftp服务器对应目录下的文件列表。
2、写一个python的ftp多线程下载脚本(ftplib,threading),把要下载的文件分解分成50份同时下载,全部下载完成后再合并。
3、ftp服务器的文件列表与本地文件列表做比较,得出要下载的文件列表;循环该要下载的文件列表,分别多线程下载。
存在的问题:
a.更新只需要下最新的文件定义即可,每天病毒定义更新较快,有可能导致以此要下载多个从而浪费带宽;
b.先用迅雷下载,然后传到局域网的ftp服务器上测试,下载无问题,文件大小一模一样,MD5值与迅雷下载相同;接下来把ftp地址改为Symantec的,下载后发现文件大小相同,MD5不一样,致命的失败。我并不知道ftplib的实现机制,猜测是网络丢包处理或者是我文件下载合并的代码有bug,一直调试都木有结果。
该版本未通过,不好意思贴了...
版本2
同事说问我能不能通过调用迅雷或者BT什么工具下载,我想也是,应该把下载的事情交给擅长的工具做!谢天谢地,迅雷有个ThunderNewTask.exe,这个东西可让我尝试了老半天!迅雷有各个exe的说明文档么?
1、获取当前ftp服务器上最新的文件。
2、拼接ftp下载地址,提交给迅雷并启动其下载程序,并将文件下载到病毒定义的路径;
该版本已经符合要求!
不过我偷了个懒,fileList = ftp.nlst()获取的文件列表恰好是按照时间的先后循序排列的,所以取后一个值即可;其实最该做的是获取服务器上文件与文件时间的映射,最后得出最新的文件。
最后将脚本做成定时任务,同事设置迅雷的默认下载路径为SEPM即可,这件事情就算是给同事搞定了。嘿嘿
python脚本的代码如下:
dlByTDMini.py
#-*- encoding: gb18030 -*-
##Coding by Hailang##
import os,time,ftplib
##配置##
ftpAddr="ftp.symantec"
ftpPort=21
userName="anonymous"
passWord=""
ftpPwd="/public/english_us_canada/antivirus_definitions/norton_antivirus/jdb/"
##把脚本放在与ThunderNewTask.exe跑的;如果是其他路径则需要加上这个.exe全路径;
exePwd="ThunderNewTask.exe"
symantecJdbPwd="D:/Program Files/Symantec/Symantec Endpoint Protection Manager/data/inbox/content/incoming/"
##获取ftp服务器某路径下的最新文件
def downLoadFileList(ftpAddr,ftpPort,userName,passWord,ftpPwd):
ftp = ftplib.FTP()
ftp.set_debuglevel(0)
ftp.connect(ftpAddr, ftpPort)
ftp.login(userName,passWord)
print ftp.getwelcome()
print "FTP服务器登录成功!"
ftp.cwd(ftpPwd)
fileList = ftp.nlst()
ftp.quit()
ftp.close()
fileNeedD = fileList[len(fileList)-1]
return fileNeedD
##拼接下载地址
def montageFtpUrl(ftpAddr,ftpPwd,fileName):
##ftp://ftp.symantec/public/english_us_canada/antivirus_definitions/norton_antivirus/jdb/vd44f203.jdb
ftpUrl = 'ftp://'+ftpAddr+ftpPwd+fileName
return ftpUrl
##判断文件是否正在下载
def checkDLing(fileName):
return os.path.exists(fileName)
##调用thunderdl下载
def cmdThunder():
print "用于下载Symantec SEP 11.0防病毒系统的.jdb离线更新--Python.Hailang"
fileName = downLoadFileList(ftpAddr,ftpPort,userName,passWord,ftpPwd)
print "本次服务器上最新的文件是:"+fileName
ftpUrl = montageFtpUrl(ftpAddr,ftpPwd,fileName)
cmd = exePwd+' '+ftpUrl
time.sleep(3)
if checkDLing(symantecJdbPwd+fileName+".td"):
print fileName+"文件正在下载!再见!"
time.sleep(3)
else:
os.system(cmd)
#exit()
##主程序
cmdThunder()
版权声明:本文标题:python+迅雷实现自动更新Symantec的病毒定义 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dongtai/1727317847a1108021.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论