# -*-coding:utf-8-*-
# @Author:malphite.tang
import json
import requests
from queue import Queue
requests.packages.urllib3.disable_warnings() # 消除equests提示警告 class Awvs():
def __init__(self):
self.host = 'https://yypentest:3443'
self.add_url_api = self.host + '/api/v1/targets' # 新增任务接口
self.speed_url_api = self.host + '/api/v1/targets/{}/configuration' # 设置扫描速度接口
self.scan_url_api = self.host + '/api/v1/scans' # 启动扫描任务接口
self.stats_url_api = self.host + '/api/v1/me/stats' # 仪表盘接口
self.del_target_api = self.host + '/api/v1/targets/{}' #删除任务接口
self.API_KEY = '1986ad8c0a5b3df4d7028d5f3c06e936ceea1b531858a41498524fb3e0ff6b021'
self.header = {'X-Auth': self.API_KEY, 'content-type': 'application/json'} # header格式
self.target_url = Queue() # 创建扫描url队列
self.target_id = Queue() # 创建任务id号队列
self.speed = 'fast' # 定义扫描速度 def main(self): # 主程序-选择对应的功能
print('选择要使用的功能(输入相应的编号):')
print('1.使用target.txt添加扫描任务 (注:url必须带有http或https)')
print('2.查看扫描器详情')
print('3.删除所有任务')
print('4.退出')
choice = input('>')
if choice == '1':
self.run1()
exit()
if choice == '2':
self.run2()
exit()
if choice == '3':
self.run3()
exit()
if choice == '4':
exit()
else:
self.main() def run1(self): # 创建任务,自动设置为fast模式,并开启扫描。
self.url_queue()
self.add_target()
self.scan_target()
def url_queue(self): # 提取target.txt文件里面的url,并添加进self.target_url队列
fh = open(r'./target.txt', 'r', encoding='utf-8')
for i in fh.readlines():
url = i.strip('\n') # 去除空行和回车行
self.target_url.put(url)
def add_target(self): # 添加扫描任务,并将返回包里的target_id添加进self.target_id队列
print('添加url中...')
while True:
if self.target_url.empty(): # 判断self.target_url队列是否为空,为空就中断循环
break
target_url = self.target_url.get() # 取self.target_url队列中的元素
add_data = json.dumps({'address' : target_url,
'description' : target_url,
'criticality' : '10'})
add_target_res=requests.post(url=self.add_url_api,headers=self.header,data=add_data,verify=False) #添加任务
if add_target_res.status_code==201: # 判断状态码是否为201
target_id=add_target_res.json()['target_id']#以json格式打开add_target_res,
self.target_id.put(target_id) # 将创建好任务的target_id,添加到target_id队列中
print('添加url成功:' + target_url)
else:
print('任务建立失败,请检查host和API_KEY是否修改正确')
def scan_target(self): # 设置扫描速度,并启动扫描任务
print('启动扫描任务...')
while True:
if self.target_id.empty(): # 判断self.target_id队列是否为空,为空就中断循环
break
scan_target_id = self.target_id.get() # 取self.target_id队列中的元素
set_data = json.dumps({'scan_speed': self.speed})
scan_data = json.dumps({"target_id": scan_target_id,
"profile_id": "11111111-1111-1111-1111-111111111111",
"schedule": {'disable': False, 'start_date': None, 'time_sensitive': False}})
set_speed_res = requests.patch(url=self.speed_url_api.format(scan_target_id),data=set_data,headers=self.header,verify=False) #设置扫描速度
if set_speed_res.status_code==204: # 判断状态码是否为204
scan_target_res=requests.post(url=self.scan_url_api,data=scan_data,headers=self.header,verify=False) #启动扫描任务
if scan_target_res.status_code==201: # 判断状态码是否为201
print(scan_target_res.json()['target_id']+'任务建立成功')
else:
print('任务建立失败,请检查host和API_KEY是否修改正确') def run2(self): # 查看仪表盘
stats_res = requests.get(url=self.stats_url_api, headers=self.header, verify=False).json()
print('任务总数:' + str(stats_res['targets_count']))
print('正在扫描的任务数量:'+str(stats_res['scans_running_count']))
print('等待扫描的任务数量:'+str(stats_res['scans_waiting_count']))
print('任务详情:')
for i in stats_res['most_vulnerable_targets']:
task_details=i['address']+' High risk:'+str(i['high_vuln_count'])+' medium risk:'+str(i['med_vuln_count'])
print(task_details) def run3(self): # 删除所有任务
self.get_target_id()
self.del_target()
def get_target_id(self): # 获取所有任务的扫描的地址和id
stats_res=requests.get(url=self.add_url_api,headers=self.header,verify=False).json()['targets']
for i in stats_res:
self.target_id.put([i['address'],i['target_id']]) # 将地址和id已列表的形式添加进target_id队列
def del_target(self): # 删除任务
while True:
if self.target_id.empty():
break
del_target_id=self.target_id.get() # 取target_id队列的元素
del_target_res=requests.delete(url=self.del_target_api.format(del_target_id[1]),headers=self.header,verify=False)
if del_target_res.status_code==204:
print('成功删除{}' .format(del_target_id[0]))
else:
print('删除失败') if __name__ == '__main__':
aw = Awvs()
aw.main()

AWVS13批量添加目标脚本的更多相关文章

  1. 工程师技术(五):Shell脚本的编写及测试、重定向输出的应用、使用特殊变量、编写一个判断脚本、编写一个批量添加用户脚本

    一.Shell脚本的编写及测 目标: 本例要求两个简单的Shell脚本程序,任务目标如下: 1> 编写一个面世问候 /root/helloworld.sh 脚本,执行后显示出一段话“Hello ...

  2. shell编写一个批量添加用户脚本

                                                          shell编写一个批量添加用户脚本 5.1问题 本例要求在虚拟机server0上创建/roo ...

  3. cacti批量添加主机脚本

    #!/bin/bash ##cacti批量脚本位置 device=/var/www/html/cacti/cli/add_device.php graphs=/var/www/html/cacti/c ...

  4. (1)使用bash脚本实现批量添加用户

    脚本实现内容: 可以指定用户名前缀,指定添加数量的批量添加用户脚本,密码为10为随机小写字母,并把用户名和密码写入文件中. 脚本代码: #!/bin/bashread -p "用户名前缀:& ...

  5. SQL批量添加主键脚本

    --SQL批量添加主键脚本 --操作提示:运行此脚本前请记得备份您要操作的数据库 --实现功能:执行脚本后数据库中的所有数据表都会有一个主键 --添加规则1:主键名称为ID(可自己修改),数据类型为整 ...

  6. ArcGis Python脚本——批量添加字段

    先看如何增加一个字段 函数:arcpy.AddField_management 语法:AddFields_management (in_table, field_description) 参数 说明 ...

  7. (转)通过shell脚本实现批量添加用户和设置随机密码以及生产环境如何批量添加

    通过shell脚本实现批量添加用户和设置随机密码以及生产环境如何批量添加 原文:http://www.21yunwei.com/archives/4773 有一个朋友问我如何批量创建用户和设置密码 , ...

  8. centos7 lvm合并分区脚本初探-linux性能测试 -centos7修改网卡名字-jdk环境安装脚本-关键字查询文件-批量添加用户

    1.#!/bin/bash lvmdiskscan | grep centos > /root/a.txt a=`sed -n '1p' /root/a.txt` b=`sed -n '2p' ...

  9. shell脚本 批量添加删除用户

    2021-07-26 1.批量添加用户 # 编写脚本 vi add_student_50.sh # 添加用户组 student groupadd student # 添加用户 student1-stu ...

随机推荐

  1. UI_UE在线就业-笔记

    UI设计 一.字体设计的应用范围 Logo设计.平面海报.包装设计.banner设计.APP引导页.UI图标.UI界面.影视设计 二.字体的分类 衬线字体和非衬线字体之分 区别在于笔画开始与结尾地方有 ...

  2. C# 10 完整特性介绍

    前言 开头防杠:.NET 的基础库.语言.运行时团队从来都是相互独立各自更新的,.NET 6 在基础库.运行时上同样做了非常多的改进,不过本文仅仅介绍语言部分. 距离上次介绍 C# 10 的特性已经有 ...

  3. Numpy数组的组合与分割详解

    在介绍数组的组合和分割前,我们需要先了解数组的维(ndim)和轴(axis)概念. 如果数组的元素是数组,即数组嵌套数组,我们就称其为多维数组.几层嵌套就称几维.比如形状为(a,b)的二维数组就可以看 ...

  4. 算法竞赛中的常用JAVA API:PriorityQueue(优先队列)(转载)

    算法竞赛中的常用JAVA API:PriorityQueue(优先队列) PriorityQueue 翻译过来就是优先队列,本质是一个堆, 默认情况下堆顶每次都保留最小值,每插入一个元素,仍动态维护堆 ...

  5. Tengine2.3+openssl1.1.1支持TLS1.3

    安装包下载: openssl1.1.1 链接:https://pan.baidu.com/s/1-qCDhkLtlkT0fdwKdVuh2g 提取码:0ncc pcre3.2.1 链接:https:/ ...

  6. 机器学习:单元线性回归(python简单实现)

    文章简介 使用python简单实现机器学习中单元线性回归算法. 算法目的 该算法核心目的是为了求出假设函数h中多个theta的值,使得代入数据集合中的每个x,求得的h(x)与每个数据集合中的y的差值的 ...

  7. cobaltstrike 框架简述

    关于cobalt strike,火起来也有好几年了,首先感谢大佬们慷慨相助愿意在网上分享和翻译相关资料,让这么好的渗透测试框架工具被更多人知道 那就来整理一下在使用这个框架的过程中我认为需要了解的小知 ...

  8. miniFTP项目实战六

    项目简介: 在Linux环境下用C语言开发的Vsftpd的简化版本,拥有部分Vsftpd功能和相同的FTP协议,系统的主要架构采用多进程模型,每当有一个新的客户连接到达,主进程就会派生出一个ftp服务 ...

  9. noip36

    开场先看一遍题面,凭着错误的感觉t3叫naive是一个原因,312开局.然后就死的很惨. T1 朴素暴力40pts,细想就有80pts,然而我只写了十分钟左右就爬回T3了,所以... 其实都是借口 正 ...

  10. docker 实现redis主从复制

    目录 一.概览 二.安装master库 三.安装slave从库 四.错误分析 五.参考网址 一.概览 主库:192.168.3.13:6380 从库一:192.168.3.14:6381 从库二:19 ...