安全监测

lijinlong
许宏杰 1 year ago
parent 05fce0b12e
commit c200de2021

@ -142,3 +142,41 @@ export function listSource(query) {
params: query params: query
}) })
} }
export function saftyscreenSupervise() {
return request({
url: '/zongzhi/saftyscreen/supervise',
method: 'get'
})
}
// 受攻击IPTop5
export function saftyscreenUnattack() {
return request({
url: '/zongzhi/saftyscreen/unattack',
method: 'get'
})
}
// 安全检测数据统计
export function saftyscreenSafety() {
return request({
url: '/zongzhi/saftyscreen/safety',
method: 'get'
})
}
// 查询安全检测列表
export function listDetection(query) {
return request({
url: '/zongzhi/detection/list',
method: 'get',
params: query
})
}
// 查询安全检测详细
export function getDetection(id) {
return request({
url: '/zongzhi/detection/' + id,
method: 'get'
})
}

@ -17,7 +17,7 @@ const dict = {
getDictType({ commit }) { getDictType({ commit }) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const query = { const query = {
list: 'sys_user_sex,tc_net_sx,tc_yq_media,tc_enter_type,tc_inlet_yewu,tc_item_type,tc_net_safety_level,tc_yes_no,tc_unit_type,tc_tmt_type,tc_net_safety_level,tc_db_steam_state' list: 'sys_user_sex,tc_net_sx,tc_yq_media,tc_enter_type,tc_inlet_yewu,tc_item_type,tc_net_safety_level,tc_yes_no,tc_unit_type,tc_tmt_type,tc_net_safety_level,tc_db_steam_state,tc_attack_type'
} }
getDictList(query) getDictList(query)
.then((res) => { .then((res) => {

@ -66,6 +66,7 @@
</template> </template>
<script> <script>
import { saftyscreenUnattack } from '@/api/zongzhi/st.js'
import { echartsJump } from '../../../../../public/static/echartsJump' import { echartsJump } from '../../../../../public/static/echartsJump'
import { getAttackTypeDistribution, getTopIp } from '@/api/common' import { getAttackTypeDistribution, getTopIp } from '@/api/common'
export default { export default {
@ -94,31 +95,31 @@ export default {
{ value: 443961, name: '其他' } { value: 443961, name: '其他' }
], ],
attackRanking: [ attackRanking: [
{ // {
total: '10.53.221.176', // total: '10.53.221.176',
num: 1821207, // num: 1821207,
url: require('@/assets/privateOrder/general/top前三.png') // url: require('@/assets/privateOrder/general/top.png')
}, // },
{ // {
total: '10.52.121.112', // total: '10.52.121.112',
num: 1271992, // num: 1271992,
url: require('@/assets/privateOrder/general/top前三.png') // url: require('@/assets/privateOrder/general/top.png')
}, // },
{ // {
total: '10.53.236.147', // total: '10.53.236.147',
num: 1184362, // num: 1184362,
url: require('@/assets/privateOrder/general/top前三.png') // url: require('@/assets/privateOrder/general/top.png')
}, // },
{ // {
total: '10.53.18.231', // total: '10.53.18.231',
num: 1014549, // num: 1014549,
url: require('@/assets/privateOrder/general/top5-其他.png') // url: require('@/assets/privateOrder/general/top5-.png')
}, // },
{ // {
total: '172.96.100.207', // total: '172.96.100.207',
num: 836344, // num: 836344,
url: require('@/assets/privateOrder/general/top5-其他.png') // url: require('@/assets/privateOrder/general/top5-.png')
} // }
], ],
controlList: [] controlList: []
// controlList: ['', '', ''] // // controlList: ['', '', ''] //
@ -142,14 +143,15 @@ export default {
// } // }
}, },
mounted() { mounted() {
this.data = [ this.getSaftyscreenUnattack()
{ value: 1, name: '韩国' }, // this.data = [
{ value: 80, name: '日本' }, // { value: 1, name: '' },
{ value: 90, name: '美国' }, // { value: 80, name: '' },
{ value: 20, name: '英国' }, // { value: 90, name: '' },
{ value: 50, name: '加拿大' } // { value: 20, name: '' },
] // { value: 50, name: '' }
this.initDistribution() // ]
// this.initDistribution()
// getAttackTypeDistribution().then((res) => { // getAttackTypeDistribution().then((res) => {
// this.data = [] // this.data = []
// res['T_ATTACK_TYPE_DISTRIBUTION[]'].forEach((ele) => { // res['T_ATTACK_TYPE_DISTRIBUTION[]'].forEach((ele) => {
@ -167,6 +169,25 @@ export default {
// }) // })
}, },
methods: { methods: {
/**
* TOP5
*/
getSaftyscreenUnattack() {
saftyscreenUnattack().then(res => {
console.log(res.data)
this.attackRanking = res.data.map((item, index) => {
return {
name: item.attackIpRegion,
value: item.pt,
total: item.attackedIp,
num: item.count,
url: index + 1 <= 3 ? require('@/assets/privateOrder/general/top前三.png') : require('@/assets/privateOrder/general/top5-其他.png')
}
})
this.initDistribution()
// console.log(this.attackRanking)
})
},
// //
initDistribution() { initDistribution() {
const chartDom = document.getElementById('section-pie') const chartDom = document.getElementById('section-pie')
@ -198,7 +219,7 @@ export default {
formatter: (name) => { formatter: (name) => {
let total = 0 let total = 0
let target let target
this.data.forEach((v) => { this.attackRanking.forEach((v) => {
total += Number(v.value) total += Number(v.value)
if (v.name === name) { if (v.name === name) {
target = v.value target = v.value
@ -247,7 +268,7 @@ export default {
labelLine: { labelLine: {
show: false show: false
}, },
data: this.data data: this.attackRanking
} }
] ]
} }

@ -84,6 +84,7 @@
<div class="monitor-detail"> <div class="monitor-detail">
<div <div
v-for="(item, index) in securityMonitor.detail" v-for="(item, index) in securityMonitor.detail"
v-show="index<3"
:key="index" :key="index"
class="monitor-detail-item" class="monitor-detail-item"
> >
@ -111,9 +112,9 @@
:data-obj="'安全监测'" :data-obj="'安全监测'"
@click="getAttackSource(item.id)" @click="getAttackSource(item.id)"
> >
<span :data-obj="'安全监测'">{{ item.date }}</span> <span>{{ item.attackTime }}</span>
<span :data-obj="'安全监测'">{{ item.ip }}</span> <span>{{ item.attackedIp }}</span>
<span :data-obj="'安全监测'" :title="item.type">{{ item.type }}</span> <span>{{ $filterDict('tc_attack_type',item.attackType) }}</span>
</div> </div>
</vue-seamless-scroll> </vue-seamless-scroll>
</div> </div>
@ -177,7 +178,7 @@
<div class="dialog_little_title">攻击类型</div> <div class="dialog_little_title">攻击类型</div>
</el-col> </el-col>
<el-col :span="18"> <el-col :span="18">
<div class="dialog_little_ctn">{{ tableDataPop.attackType }}</div> <div class="dialog_little_ctn">{{ $filterDict('tc_attack_type',tableDataPop.attackType) }}</div>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
@ -208,26 +209,26 @@
</div> </div>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <!-- <el-row>
<el-col :span="6"> <el-col :span="6">
<div class="dialog_little_title">受攻击目标类型</div> <div class="dialog_little_title">受攻击目标类型</div>
</el-col> </el-col>
<el-col :span="18"> <el-col :span="18">
<div class="dialog_little_ctn">{{ tableDataPop.attackedType }}</div> <div class="dialog_little_ctn">{{ $filterDict('tc_attack_type',tableDataPop.attackType) }}</div>
</el-col> </el-col>
</el-row> </el-row> -->
<el-row> <el-row>
<el-col :span="6"> <el-col :span="6">
<div class="dialog_little_title">网站安全等级</div> <div class="dialog_little_title">网站安全等级</div>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<div class="dialog_little_ctn">{{ tableDataPop.webLevel }}</div> <div class="dialog_little_ctn">{{ $filterDict('tc_net_safety_level',tableDataPop.level) }}</div>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<div class="dialog_little_title">联系电话</div> <div class="dialog_little_title">联系电话</div>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<div class="dialog_little_ctn">{{ tableDataPop.contactTel }}</div> <div class="dialog_little_ctn">{{ tableDataPop.phoneNum }}</div>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
@ -236,14 +237,14 @@
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<div class="dialog_little_ctn"> <div class="dialog_little_ctn">
{{ tableDataPop.subordinateDept }} {{ tableDataPop.affUnit }}
</div> </div>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<div class="dialog_little_title">联系人</div> <div class="dialog_little_title">联系人</div>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<div class="dialog_little_ctn">{{ tableDataPop.contactName }}</div> <div class="dialog_little_ctn">{{ tableDataPop.linkMan }}</div>
</el-col> </el-col>
</el-row> </el-row>
</template> </template>
@ -293,7 +294,9 @@ import vueSeamlessScroll from 'vue-seamless-scroll'
import ModuleTitle from '../../common/ModuleTitle.vue' import ModuleTitle from '../../common/ModuleTitle.vue'
import attackSituation from './attackSituation.vue' import attackSituation from './attackSituation.vue'
import ExcelTable from '@/components/ExcelTable' import ExcelTable from '@/components/ExcelTable'
import { listSystem, listUnit, listWeb, listIDCunit, listSource } from '@/api/zongzhi/st.js' import { listSystem, listUnit, listWeb, listIDCunit, listSource, saftyscreenSupervise, saftyscreenSafety,
listDetection, getDetection
} from '@/api/zongzhi/st.js'
import { import {
yingTanZhen, yingTanZhen,
yingTanZhenKeyValue, yingTanZhenKeyValue,
@ -339,7 +342,12 @@ export default {
pageSize: 10 pageSize: 10
}, // }, //
total: 0, // total: 0, //
time: null,
checkTotal: 0,
checkParams: {
pageNum: 1,
pageSize: 10
},
// //
dialogWidth: 0, dialogWidth: 0,
dialogStatus: false, dialogStatus: false,
@ -388,100 +396,100 @@ export default {
superviseObject: [ superviseObject: [
{ {
title: '政府网站', title: '政府网站',
num: 446, num: 0,
className: 'item1', className: 'item1',
url: require('@/assets/privateOrder/general/icon-政府网站.png') url: require('@/assets/privateOrder/general/icon-政府网站.png')
}, },
{ {
title: '监管单位', title: '监管单位',
num: 2098, num: 0,
className: 'item2', className: 'item2',
url: require('@/assets/privateOrder/general/icon-监管单位.png') url: require('@/assets/privateOrder/general/icon-监管单位.png')
}, },
{ {
title: '网站监测', title: '网站监测',
num: 2658, num: 0,
className: 'item3', className: 'item3',
url: require('@/assets/privateOrder/general/icon-网站监测.png') url: require('@/assets/privateOrder/general/icon-网站监测.png')
}, },
{ {
title: 'IDC单位', title: 'IDC单位',
num: 1, num: 0,
className: 'item4', className: 'item4',
url: require('@/assets/privateOrder/general/icon-IDC单位.png') url: require('@/assets/privateOrder/general/icon-IDC单位.png')
}, },
{ {
title: '等保系统', title: '等保系统',
num: 181, num: 0,
className: 'item5', className: 'item5',
url: require('@/assets/privateOrder/general/icon-等保系统.png') url: require('@/assets/privateOrder/general/icon-等保系统.png')
}, },
{ {
title: '等保单位', title: '等保单位',
num: 109, num: 0,
className: 'item6', className: 'item6',
url: require('@/assets/privateOrder/general/icon-等保单位.png') url: require('@/assets/privateOrder/general/icon-等保单位.png')
} }
], ],
securityMonitor: { securityMonitor: {
url: require('@/assets/privateOrder/general/icon-网络攻击.png'), url: require('@/assets/privateOrder/general/icon-网络攻击.png'),
title: '网络攻击()', title: '网络攻击()',
total: 3225.5, total: 0,
detail: [ detail: [
{ // {
title: '入侵攻击', // title: '',
num: 1455.92 // num: 1455.92
}, // },
{ // {
title: '恶意扫描', // title: '',
num: 2325.24 // num: 2325.24
}, // },
{ // {
title: '僵木蠕病毒', // title: '',
num: 796.152 // num: 796.152
} // }
] ]
}, },
tableDataPop: { tableDataPop: {
id: 1, // id: 1,
attackTime: '2023-07-30', // attackTime: '2023-07-30',
sourceIp: '192.168.0.114', // sourceIp: '192.168.0.114',
attackType: '网络爬虫', // attackType: '',
attackIpRegion: '美国', // attackIpRegion: '',
attackedIp: '192.168.5.0', // attackedIp: '192.168.5.0',
attackedIpRegion: '太仓', // attackedIpRegion: '',
attackedType: '网络爬虫', // attackedType: '',
webLevel: '1级别', // webLevel: '1',
contactTel: '18703885598', // contactTel: '18703885598',
subordinateDept: '网络安全部', // subordinateDept: '',
contactName: '张三' // contactName: ''
}, },
tableData: [ tableData: [
{ // {
date: '2022-02-13', // date: '2022-02-13',
ip: '荷兰/178.128.242.134', // ip: '/178.128.242.134',
type: '挖矿' // type: ''
}, // },
{ // {
date: '2022-02-13', // date: '2022-02-13',
ip: '荷兰/178.128.242.134', // ip: '/178.128.242.134',
type: '挖矿' // type: ''
}, // },
{ // {
date: '2022-02-13', // date: '2022-02-13',
ip: '杭州市/60.190.232.14', // ip: '/60.190.232.14',
type: '扫描行为' // type: ''
}, // },
{ // {
date: '2022-02-13', // date: '2022-02-13',
ip: '荷兰/178.128.242.134', // ip: '/178.128.242.134',
type: '挖矿' // type: ''
}, // },
{ // {
date: '2022-02-13', // date: '2022-02-13',
ip: '荷兰/178.128.242.134', // ip: '/178.128.242.134',
type: '挖矿' // type: ''
} // }
], ],
excelData: null, excelData: null,
excelDataHeader: null excelDataHeader: null
@ -505,9 +513,20 @@ export default {
destroyed() { destroyed() {
clearInterval(this.attackTime) // clearInterval(this.attackTime) //
clearInterval(this.tableTime) clearInterval(this.tableTime)
clearInterval(this.time)
}, },
mounted() { mounted() {
this.changeBtn() // this.changeBtn() //
this.getSaftyscreenSafety()
this.getListDetection()
this.time = setInterval(() => { //
if (this.tableData.length >= this.checkTotal) {
clearInterval(this.time)
} else {
this.checkParams.pageNum = this.checkParams.pageNum + 1
this.getListDetection()
}
}, 6000)
// this.getDataSource() // // this.getDataSource() //
// //
// getLatest().then((res) => { // getLatest().then((res) => {
@ -565,9 +584,43 @@ export default {
}, },
async getAttackSource(id) { async getAttackSource(id) {
this.dialogWidth = '1000px' this.dialogWidth = '1000px'
// await this.AttackClick(id) getDetection(id).then(res => {
this.dialogStatus = true this.tableDataPop = res.data
this.dialogType = '安全监测' this.dialogType = '安全监测'
this.dialogStatus = true
})
// await this.AttackClick(id)
},
/**
* 安全监管List
*/
getListDetection() {
listDetection(this.checkParams).then(res => {
this.tableData = [...this.tableData, ...res.rows]
this.checkTotal = res.total
})
},
/**
* 安全监测攻击类型统计
*/
getSaftyscreenSafety() {
saftyscreenSafety().then(res => {
this.securityMonitor.detail = res.data.list.map((item, index) => {
this.securityMonitor.total = this.securityMonitor.total + item.count
return {
title: this.$filterDict('tc_attack_type', item.attackType),
num: item.count
}
})
})
},
/**
* 监管对象各类别统计量
*/
getSaftyscreenSupervise() {
saftyscreenSupervise().then(res => {
// this.superviseObject[4].num = res.data.
})
}, },
/** /**
* 表格参数重置 * 表格参数重置

Loading…
Cancel
Save