qtableview点击行将整行数据传过去_可以实时获取数据的Database Asset插件

6f4c9e7ee9f2d0ba84705f76d6ba915d.png

前言:Goby之前开放的插件入口点较少,大家只能在扫描前、扫描后执行事件,无法参与扫描过程中来。为实现更多场景的应用及提高扫描效率(如:后台爆破子域名等),Goby开放了一些新的API:事件通知机制、自定义页面等,并开发了一个统计数据库信息的插件——Database Asset,作为案例。该插件可以统计扫描任务中获取到的数据并进行筛选,筛选出用户需要显示的数据库信息。

0x001 最终效果

安装完成插件后,Goby左侧导航栏会出现我们的插件入口,开始扫描后,插件会统计扫描到的数据库信息,插件默认统计mysql,redis,MongoDB,Elasticsearch这四个数据库。扫描过程中会将统计的数据库数量展现在左侧导航栏插件入口标记处。

插件开发文档 https://gobies.org/docs.html

7f5a4367c15533d30cb078ae1eec6b88.gif

0x002 最终效果

2.1 确定功能的入口点及用到的API

入口点:左侧导航

自定义页面并可以后台运行的API:showPage(url,true)

function activate(content) {goby.registerCommand('left-nav',function(){//因为支持相对路径,所以传入相对路径,第二个参数为后台运行goby.showPage('./assets/index.html',true); })
}
exports.activate = activate;

需要实时获取扫描过程中的数据以及扫描状态改变时执行一些自定义事件:bindEvent;

扫描到符合条件的数据是需要通知用户:changeBadge;

点击查看信息页面跳转:showPage(url,false);

2.2 开发流程

2.2.1 package.json中设置入口点以及initEvents

"views": {"leftNav": [{"command":"left-nav","title": "Database","icon": "src/assets/img/logo.png"}]}
"initEvents": ["left-nav"]
注:新版本支持String 与 Array,如果要执行多个命令,只需将命令依次放到数组里,Goby会在安装插件成功后,主动执行指定命令:
"initEvents": ["event1", "event2"]

2.2.2 html页面初始化

首先声明我们需要统计的数据库信息、消息通知的内容、整合后的数据对象、任务id:

let app = ["mysql" ,"redis", "MongoDB", "Elasticsearch"];  
//消息通知let num = 0;//保存数据let data = {};//任务Idlet taskId;

2.2.3 绑定事件通知及设置Badge

实时获取数据,对扫描数据进行处理。因为太多,这里只展示对onApp数据的处理,数据的详细信息在官网中有说明。

goby.bindEvent('onApp',function(content){init();let ip = content.hostinfo.match(ipreg)[0];let port = content.hostinfo.split(':').pop();initIp(ip);initPort(ip,port,content);if(app.map((v,k)=>v.toLowerCase()).includes(content.product.toLowerCase())){num++;goby.changeBadge('leftNav','left-nav',num);let tbody = $(`#${taskId}`)[0];if(!tbody){let ttbody = $(`<tbody id="${taskId}" class="${taskId}"><tr class="task"><td colspan="3">任务 : ${taskId}</td>  </tr></tbody>`);$('table').append(ttbody);}if($('.noData').css('display')!='none'){$('.noData').hide();}if($('table').css('display')=='none'){$('table').css('display','table')}let tr = $(`<tr class="info"><td>${content.product}</td><td>${ip}</td><td>${port}</td></tr>`);$(tr).prop('ip',ip);$(tr).prop('port',port);$(tr).prop('taskId',taskId);$(`#${taskId}`).append(tr);}})

点击跳转页面,使用委托事件绑定点击事件,调用showPage API打开一个临时页面,并将要展示的数据传过去。

 $("table").delegate('.info','click',function(){let info = data[$(this).prop('taskId')][$(this).prop('ip')][$(this).prop('port')];
//因为整合数据后偶尔会没有ip与port,所以在手动设置一遍info.ip = [$(this).prop('ip')];
info.port = [$(this).prop('port')];goby.showPage(`./detail.html?info=${encodeURI(JSON.stringify(info))}`)})

2.2.4 数据展示

详情页面中就是将传送数据的展示:

93a861e3d6ef8141a739cbbc51761de3.gif

0x003 小结

这个插件没有使用第三方UI框架,写的样式很简单,这次在showPage页面中内置了goby对象,不需要在通过parent.goby来访问API,可直接使用,除此之外内置了一些css简单样式,不需要自己写的多复杂,只是简单的展示数据库信息。

Goby的showPage页面的还内置的一些css颜色变量(主题颜色变量),我们在开发的时候可以使用这些变量来设置颜色,这样我们的页面还会随着Goby主题的切换而变化:

1cebbc30a2087d33e11cf80402a7bc18.png

如何下载Database Asset插件?

Database Asset目前只支持到超级内测版,后面很快支持到内测版、开发版与大家见面,届时,后台路径爆破、IP地理位置识别、操作系统识别等需求都可以通过此方式实现。一起期待吧~

本次用到的API在B站都有详细的教学,欢迎大家到弹幕区合影~

  • 如何开启一个自定义页面https://www.bilibili.com/video/BV1Ha411w7RF/
  • 绑定事件通知https://www.bilibili.com/video/BV1Py4y1q7LD/
  • 设置Badgehttps://www.bilibili.com/video/BV1Ur4y1F7Bp/
  • 默认浏览器打开给定的URLhttps://www.bilibili.com/video/BV11z4y1k7zP/
文章来自Goby团队,转载请注明出处。
下载Goby内测版,请关注公众号:Gobysec
下载Goby正式版,请访问官网:http://gobies.org

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/457639.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

git 笔记

版本库1.repository在一个合适的地方&#xff0c;创建一个空目录$ mkdir learngit$ cd learngit$ pwd/User/leon/learngitpwd命令用于显示当前的目录&#xff0c;在我的电脑上&#xff0c;这个仓库位于/user/michael/learngit2.git init 将当前目录变成git 可以管理的仓库。$ g…

github 开源 代码 学习 集合(转载)

一个支持多种item类型的recycleView依赖注入库 1.通过注解的方式方便的把ViewHolder注入到recycleView中。 2.去除findViewByID等冗余操作。 3.去除编写adapter那些冗余逻辑&#xff0c;只需要编写proxy和holder即可快速的实现淘宝首页那样复杂的页面。https://github.com/s94…

JS_12 DOM

DOM 操作 HTML DOM Document Object Model&#xff0c;文档对象模型&#xff0c;用js操作文档对象 [外链图片转存失败(img-Dygj4uK9-1562680086020)(image/domtree.gif)] 节点&#xff1a;构成网页最基本的部分&#xff0c;网页的每一部分都是一个节点 文档节点&#xff1a;…

星星排序python_python中怎么实现星星排列

python中怎么实现星星排列&#xff1f;下面给大家带来几种排列阵型。星星阵型1def stars1(n):for i in range(1,n1):str "*"*iprint strif __name__ "__main__":stars1(5)星星阵型2def stars2(n):for i in range(1,n1):str **(n1-i)print strif __name_…

Kendo UI开发教程:Kendo UI模板概述

2019独角兽企业重金招聘Python工程师标准>>> Kendo UI框架提供了一个易用&#xff0c;高性能的JavaScript模板引擎。通过模板可以创建一个HTML片段然后可以和JavaScript数据合并成最终的HTML元素。Kendo 模板侧重于UI显示&#xff0c;支持关键的模板功能&#xff0c…

JS_13原型与原型链

原型与原型链 原型 每一个函数都有一个属性&#xff1a;prototype,默认指向object空对象&#xff0c;就是原型对象,原型对象有一个constructor属性&#xff0c;指向函数对象每一个实例化对象都有一个属性 proto ,默认指向构造函数的原型对象&#xff08;是构造函数原型对象的…

ajax数据保存及解析

1. $(#frmCam).serialize()&#xff1b;serialize() 方法通过序列化表单值&#xff0c;创建 URL 编码文本字符串。 2.自动对应ID和值 window.camConfig [<%(camConfig) %>]; if (camConfig.length>0) { for(var property in cam…

python和revit_pyRevit系列教程1

有没有人和我一样&#xff0c;想要自己写一些小功能来用(zhuang)用(bi)&#xff0c;但苦于C#太难学了&#xff0c;不得不作罢。话说感受过Python的美好&#xff0c;怎么能忍受C#的大括号&#xff01;毕竟人生苦短&#xff0c;我用Python&#xff01;好吧&#xff0c;我承认是我…

【leetcode】104. Maximum Depth of Binary Tree

1. 题目 Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node. 2. 思路 递归到左、右子树的max值&#xff0c;1. 3. 代码 /*** Definition for a binary tree …

JS_14 执行上下文与执行上下文栈

执行上下文和执行上下文栈 变量提升和函数提升 变量提升 所用使用var定义的变量&#xff0c;在程序运行前会被先定义&#xff0c;并赋初值为underfind&#xff0c;保存到其执行上下文中 函数提升 在调用函数&#xff0c;执行函数体之前&#xff0c;会先执行函数定义&#xff…

shell编程-变量

1.Bash用户自定义变量 【局部变量】 【按数据存储分类】&#xff1a;整型、浮点型、字符串型、日期型 【变量定义】&#xff1a;x5,y6,z$x$y56,m$(($x$y))11 【Bash变量默认都为字符串型&#xff0c;等号左右不可以有空格】 【变量叠加】&#xff1a;x"$x"123,x${x}3…

JS_15作用域与作用域链

作用域与作用域链 作用域 类别 全局作用域函数作用域块作用域&#xff1a;Es6时出现&#xff0c;之前没有 作用域与执行上下文 区别 创建时机不同 全局作用域外&#xff0c;每个函数都有自己的作用域&#xff0c;作用域在函数创建时就创建了&#xff0c;而不是在调用时全局执…

多线程调用同一个对象的方法_多线程之如何创建和使用线程

一、创建线程和使用线程方式1.1 继承Thread让线程类继承自Thread类&#xff0c;然后重写run()&#xff0c;把需要多线程调用的代码放到run()中。但是需要开启线程的时候不能调用run方法&#xff0c;而是需要调用start()方法。/*** 本类用于演示第一种实现多线程的方式*/ class…

struts2的namespace的问题

<?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> <inc…

JS_16闭包

闭包 什么是闭包 理解1&#xff1a;闭包是嵌套的内部函数理解2&#xff1a;闭包是包含被引用变量&#xff08;函数&#xff09;的对象 闭包产生的条件 函数嵌套子函数调用了父函数的数据父函数被调用了&#xff08;子函数不一定需要被调用&#xff0c;只需要执行函数定义即可&…

[Intel Edison开发板] 02、Edison开发板入门

一、前言 Start from the link: 开始学习的链接 上面链接是官网的教程&#xff0c;按照教程可以开发板入门&#xff1a; 其中第一步是了解开发板&#xff0c;涉及到如何组装、如何连线、一些主要的接口简单介绍等信息&#xff1b;第二步主要是介绍如何用官方提供的工具进行配置…

python apscheduler一次只有一个job_Python使用APScheduler实现定时任务过程解析

前言APScheduler是基于Quartz的一个Python定时任务框架。提供了基于日期、固定时间间隔以及crontab类型的任务&#xff0c;并且可以持久化任务。一、安装APSchedulerpip install apscheduler二、基本概念APScheduler有四大组件&#xff1a;1、触发器 triggers &#xff1a;触发…

java web service简单示例

http://www.iteye.com/topic/1135747 转载于:https://www.cnblogs.com/fycct/p/5669420.html

shell统计指定目录下所有文件类型及数量

#!/bin/bash#Synopsis:用于统计脚本当前所在目录或者用户指定目录下的所有文件类型及数量#若直接运行脚本而不接任何命令行参数,则默认会统计脚本所在目录下的文件#Date:2016/10#Author:Jian#Usage:sh fileStat.sh /path1 /path2testFile$(mktemp /tmp/testfile.XXX)#如果没有指…

python cross val score_sklearn函数:cross_val_score(交叉验证评分)

sklearn.model_selection.cross_val_score(estimator,X,yNone,*,groupsNone,scoringNone,cvNone,n_jobsNone,verbose0,fit_paramsNone,pre_dispatch2*n_jobs,error_scorenan)前面我们提到了4种分割数据集的方法&#xff0c;在分割完数据集后&#xff0c;我们训练模型&#xff0…