python调用virustota接口api实现上传文件返回查毒结果

virustotal是一个可以检测文件与url,以及接口ip病毒的网站,如果要访问,可能要翻墙,这一就不详解了。在网上查看相关的知识的话,都是python2的代码,好多已经不能用了。因此在这里我就分享一下python3调用virustotal的api接口实现本地文件上传到该网站并返回查毒结果的功能。

这里一般是exe文件,如果有其他格式文件,就需要其他操作,这里先不讲解。
下面是实现代码,这里的apikey保密,大家可以自己去网站注册,私有的api可能要联系网站。

代码如下:

#www.virustotal.com/vtapi/v2/

import requests
import json

def getFileScanId(url,apikey,a,b):
    # /file/scan
    # /文件/扫描
    # 上传并扫描文件
    # 限制为32MB
    params = {'apikey': apikey}
    files = {'file': (a, open(b, 'rb'))}
    response = requests.post(url, files=files, params=params)
    my_scan_id = str(response.json()['scan_id'])
    return my_scan_id

def getFieReportResult(url,apikey,my_scan_id):
    #/file/report
    # /文件/报告
    # 检索文件扫描报告
    #该resource参数可以是要获取最新的病毒报告文件的MD5SHA-1SHA-256。
    #还可以指定/ file / scan端点scan_id返回的值。
    #如果allinfo参数设置为true除了返回防病毒结果之外的其他信息。
    get_params = {'apikey': apikey, 'resource': my_scan_id,'allinfo': '1'}
    response2 = requests.get(url, params=get_params)
    jsondata = json.loads(response2.text)
    with open("jsonResult.json","w") as f:
        json.dump(jsondata, f, indent=4)
    return jsondata

def getResult(json):
    result = {}
    for k,v in json["scans"].items():
        result[k] = v['detected']
    print(result)
    print("一共有{0}条杀毒数据".format(len(result)))
    with open("result.txt","w") as g:
        g.write(str(result))

def main():
    file_name = input("请输入文件名:")
    a = str(file_name)
    file_src  = input("请输入文件路径:")
    b = str(file_src)

    url1 = 'https://www.virustotal.com/vtapi/v2/file/scan'
    url2 = "https://www.virustotal.com/vtapi/v2/file/report"
    #需要提供密钥,否者会出现403错误
    apikey = "保密"

    #获得文件scan_id
    scan_id = getFileScanId(url1,apikey,a,b)
    #获得返回的json结果并写入result文件
    #getFieReportResult(url2, apikey, scan_id)
    json = getFieReportResult(url2,apikey,scan_id)
    getResult(json)

if __name__ == '__main__':
    main()

结果如下:
如果是False,则是安全的;如果出现了True,这可能有病毒。
没有病毒的文件:
在这里插入图片描述
在这里插入图片描述
有病毒的文件:
在这里插入图片描述
在这里插入图片描述

但有时可能会出现:
在这里插入图片描述
这里就是没有返回结果,为什么会这样,看一下官方的api文档的一些规则就知道了:
在这里插入图片描述
在这里插入图片描述
这段英文的意思是:
Public API限制为每分钟4个请求。
Public API不得用于商业产品或服务。
Private API返回更多威胁数据并公开更多端点。
Private API由SLA管理,可确保数据准备就绪。

原来我们的公共api只能够这样访问了,不过这些就够用了。如果大家想要一些高级功能的话,就可以联系官方,获得私有apikey,就可以获得更多功能了。

猜你喜欢

转载自blog.csdn.net/ITxiaoangzai/article/details/89344567
今日推荐