python+迅雷实现自动更新Symantec的病毒定义

背景:公司Symantec SEP 11.0防病毒系统的病毒库更新到2015-1-5之后不能自动更新了(厂家做了限制),但Sep 12.1是每年要买license的,所以不太想升级到12.1。

官网FTP网站(ftp://ftp.symantec.com/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.com"
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.com/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()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值