【智简网络】如何用python实现基于virustotal的在线杀毒

举报
数通开发者合作测试 发表于 2021/01/22 15:20:11 2021/01/22
【摘要】 【背景】近期需要做一个应用查毒的程序,但发现国内杀毒软件没有可以调用的接口,在搜索引擎查询后发现,有两个在线平台可以提供文件的查毒功能以及可调用接口,两个平台的介绍参见如下:virustotal:https://www.virustotal.com/gui/;支持70+的全球杀毒软件,包括国内大名鼎鼎的360,腾讯等,但没有中文界面,注册需要翻墙(公司内部可以直接注册),在外网使用访问速度比...

【背景】

近期需要做一个应用查毒的程序,但发现国内杀毒软件没有可以调用的接口,在搜索引擎查询后发现,有两个在线平台可以提供文件的查毒功能以及可调用接口,两个平台的介绍参见如下:

virustotal:https://www.virustotal.com/gui/

支持70+的全球杀毒软件,包括国内大名鼎鼎的360,腾讯等,但没有中文界面,注册需要翻墙(公司内部可以直接注册),在外网使用访问速度比virusscan快,查杀文件需要小于128M,接口资料全面,支持restful调用,有代码样例。

virusscan:https://www.virscan.org/language/zh-cn/

支持46种全球杀毒软件,支持中文,在外网使用访问速度很慢,查杀文件需要小于20M,接口资料很简单,不支持restful调用,只支持php。

基于以上情况,选择virustotal作为在线应用查杀的引擎。

【实现原理】

实现原理参见如下流程图:

image.png

【参考代码】

这部分参考代码是获取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)

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。