qtableview点击行将整行数据传过去_可以实时获取数据的Database Asset插件
前言:Goby之前開放的插件入口點(diǎn)較少,大家只能在掃描前、掃描后執(zhí)行事件,無法參與掃描過程中來。為實現(xiàn)更多場景的應(yīng)用及提高掃描效率(如:后臺爆破子域名等),Goby開放了一些新的API:事件通知機(jī)制、自定義頁面等,并開發(fā)了一個統(tǒng)計數(shù)據(jù)庫信息的插件——Database Asset,作為案例。該插件可以統(tǒng)計掃描任務(wù)中獲取到的數(shù)據(jù)并進(jìn)行篩選,篩選出用戶需要顯示的數(shù)據(jù)庫信息。
0x001 最終效果
安裝完成插件后,Goby左側(cè)導(dǎo)航欄會出現(xiàn)我們的插件入口,開始掃描后,插件會統(tǒng)計掃描到的數(shù)據(jù)庫信息,插件默認(rèn)統(tǒng)計mysql,redis,MongoDB,Elasticsearch這四個數(shù)據(jù)庫。掃描過程中會將統(tǒng)計的數(shù)據(jù)庫數(shù)量展現(xiàn)在左側(cè)導(dǎo)航欄插件入口標(biāo)記處。
插件開發(fā)文檔 https://gobies.org/docs.html0x002 最終效果
2.1 確定功能的入口點(diǎn)及用到的API
入口點(diǎn):左側(cè)導(dǎo)航
自定義頁面并可以后臺運(yùn)行的API:showPage(url,true)
function activate(content) {goby.registerCommand('left-nav',function(){//因為支持相對路徑,所以傳入相對路徑,第二個參數(shù)為后臺運(yùn)行g(shù)oby.showPage('./assets/index.html',true); }) } exports.activate = activate;需要實時獲取掃描過程中的數(shù)據(jù)以及掃描狀態(tài)改變時執(zhí)行一些自定義事件:bindEvent;
掃描到符合條件的數(shù)據(jù)是需要通知用戶:changeBadge;
點(diǎn)擊查看信息頁面跳轉(zhuǎn):showPage(url,false);
2.2 開發(fā)流程
2.2.1 package.json中設(shè)置入口點(diǎn)以及initEvents
"views": {"leftNav": [{"command":"left-nav","title": "Database","icon": "src/assets/img/logo.png"}]}"initEvents": ["left-nav"]注:新版本支持String 與 Array,如果要執(zhí)行多個命令,只需將命令依次放到數(shù)組里,Goby會在安裝插件成功后,主動執(zhí)行指定命令:"initEvents": ["event1", "event2"]2.2.2 html頁面初始化
首先聲明我們需要統(tǒng)計的數(shù)據(jù)庫信息、消息通知的內(nèi)容、整合后的數(shù)據(jù)對象、任務(wù)id:
let app = ["mysql" ,"redis", "MongoDB", "Elasticsearch"]; //消息通知let num = 0;//保存數(shù)據(jù)let data = {};//任務(wù)Idlet taskId;2.2.3 綁定事件通知及設(shè)置Badge
實時獲取數(shù)據(jù),對掃描數(shù)據(jù)進(jìn)行處理。因為太多,這里只展示對onApp數(shù)據(jù)的處理,數(shù)據(jù)的詳細(xì)信息在官網(wǎng)中有說明。
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">任務(wù) : ${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);}})點(diǎn)擊跳轉(zhuǎn)頁面,使用委托事件綁定點(diǎn)擊事件,調(diào)用showPage API打開一個臨時頁面,并將要展示的數(shù)據(jù)傳過去。
$("table").delegate('.info','click',function(){let info = data[$(this).prop('taskId')][$(this).prop('ip')][$(this).prop('port')]; //因為整合數(shù)據(jù)后偶爾會沒有ip與port,所以在手動設(shè)置一遍info.ip = [$(this).prop('ip')]; info.port = [$(this).prop('port')];goby.showPage(`./detail.html?info=${encodeURI(JSON.stringify(info))}`)})2.2.4 數(shù)據(jù)展示
詳情頁面中就是將傳送數(shù)據(jù)的展示:
0x003 小結(jié)
這個插件沒有使用第三方UI框架,寫的樣式很簡單,這次在showPage頁面中內(nèi)置了goby對象,不需要在通過parent.goby來訪問API,可直接使用,除此之外內(nèi)置了一些css簡單樣式,不需要自己寫的多復(fù)雜,只是簡單的展示數(shù)據(jù)庫信息。
Goby的showPage頁面的還內(nèi)置的一些css顏色變量(主題顏色變量),我們在開發(fā)的時候可以使用這些變量來設(shè)置顏色,這樣我們的頁面還會隨著Goby主題的切換而變化:
如何下載Database Asset插件?
Database Asset目前只支持到超級內(nèi)測版,后面很快支持到內(nèi)測版、開發(fā)版與大家見面,屆時,后臺路徑爆破、IP地理位置識別、操作系統(tǒng)識別等需求都可以通過此方式實現(xiàn)。一起期待吧~
本次用到的API在B站都有詳細(xì)的教學(xué),歡迎大家到彈幕區(qū)合影~
- 如何開啟一個自定義頁面https://www.bilibili.com/video/BV1Ha411w7RF/
- 綁定事件通知https://www.bilibili.com/video/BV1Py4y1q7LD/
- 設(shè)置Badgehttps://www.bilibili.com/video/BV1Ur4y1F7Bp/
- 默認(rèn)瀏覽器打開給定的URLhttps://www.bilibili.com/video/BV11z4y1k7zP/
下載Goby內(nèi)測版,請關(guān)注公眾號:Gobysec
下載Goby正式版,請訪問官網(wǎng):http://gobies.org
總結(jié)
以上是生活随笔為你收集整理的qtableview点击行将整行数据传过去_可以实时获取数据的Database Asset插件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ansible执行过程分析、异步模式和速
- 下一篇: Xposed 之旅 -- 微信防撤回