【智简网络】如何用python实现基于virustotal的在线杀毒
【背景】
近期需要做一个应用查毒的程序,但发现国内杀毒软件没有可以调用的接口,在搜索引擎查询后发现,有两个在线平台可以提供文件的查毒功能以及可调用接口,两个平台的介绍参见如下:
virustotal:https://www.virustotal.com/gui/;
支持70+的全球杀毒软件,包括国内大名鼎鼎的360,腾讯等,但没有中文界面,注册需要翻墙(公司内部可以直接注册),在外网使用访问速度比virusscan快,查杀文件需要小于128M,接口资料全面,支持restful调用,有代码样例。
virusscan:https://www.virscan.org/language/zh-cn/
支持46种全球杀毒软件,支持中文,在外网使用访问速度很慢,查杀文件需要小于20M,接口资料很简单,不支持restful调用,只支持php。
基于以上情况,选择virustotal作为在线应用查杀的引擎。
【实现原理】
实现原理参见如下流程图:
【参考代码】
这部分参考代码是获取virustotal查杀结果中的360查杀结果:
import requests
import time
scanfile ='D:\\virustotal\\NE40E-X3.zip'
scanurl = 'https://www.virustotal.com/vtapi/v2/file/scan'
#key值需要在网站注册后,登陆获取
mykey = 'XXXXXXX'
params = {'apikey': mykey}
files = {'file': (scanfile, open(scanfile, 'rb'))}
response = requests.post(scanurl, files=files, params=params)
print(response.json())
#获取scanid用于下面获取查毒结果的时候使用
myscanid = response.json()['scan_id']
print(myscanid)
# 获取查毒结果
while True:
urlreport = 'https://www.virustotal.com/vtapi/v2/file/report'
params = {'apikey': mykey, 'resource': myscanid}
response = requests.get(urlreport, params=params)
print(response.json())
# 解析杀毒结果中的360引擎查杀信息
scanresult = response.json()
#杀毒报告中response_code结果为1表示完成查杀
if scanresult['response_code'] == 1:
realresult = scanresult['scans']
for virusresult in realresult:
if virusresult == 'Qihoo-360':
print('360 scan result:')
dictvirus = realresult[virusresult]
print(dictvirus)
print('detected',dictvirus['detected'])
print('version',dictvirus['version'])
print('result',dictvirus['result'])
print('update',dictvirus['update'])
break
else:
#由于文件传输上去杀毒需要时间,所以设定一个延时
time.sleep(120)
- 点赞
- 收藏
- 关注作者
评论(0)