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.pswp.cn/news/457639.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/457639.shtml
英文地址,請注明出處:http://en.pswp.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…