# -*-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. OpenGL学习笔记(六)坐标系统

    目录 一.衔接 二.概述 三.各个坐标系统 局部空间 世界空间 观察空间 裁剪空间 四.两种投影矩阵 正射投影 透视投影 五.把它们都组合到一起 六.编码实现 1. 实现卡片旋转 2. 实现正方体旋转 ...

  3. Jetpack Compose学习(2)——文本(Text)的使用

    原文: Jetpack Compose学习(2)--文本(Text)的使用 | Stars-One的杂货小窝 对于开发来说,文字最为基础的组件,我们先从这两个使用开始吧 本篇涉及到Kotlin和DSL ...

  4. NOIP 模拟 $30\; \rm 毛三琛$

    题解 \(by\;zj\varphi\) 二分答案,考虑二分背包中的最大值是多少. 枚举 \(p\) 的值,在当前最优答案不优时,直接跳掉. 随机化一下 \(p\),这样复杂度会有保证. Code # ...

  5. Angular Module 共享模块使用 父模块使用多个子模块

      Component.module.ts import {BrowserModule} from '@angular/platform-browser'; import {LocationStrat ...

  6. ReentrantLock中的Condition(等待和唤醒)

    Condition 类的 awiat 方法和 Object 类的 wait 方法等效 Condition 类的 signal 方法和 Object 类的 notify 方法等效 Condition 类 ...

  7. 使用Postman测试 参数为实体类

    Body-->raw-->json

  8. web API 的异常处理

    实现自定义的异常处理类 --------------------------------------------------------------------- public class MyExc ...

  9. ORM 之 EF的使用(一)

    早期对数据库进行操作 通过Ado.Net 操作数据库 需要操作sqlCommand/sqlConnection/adapter/datareader 如图 后来 基于面向对象的思想 出现了中间件ORM ...

  10. C#基础知识---匿名方法使用

    一.匿名方法使用 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Tex ...