2019-09-03 17:19:06 +08:00
package data
import (
"github.com/gin-gonic/gin"
"github.com/gorilla/websocket"
"net/http"
"fmt"
2019-12-03 21:28:24 +08:00
"HFish/core/dbUtil"
"strconv"
"HFish/utils/log"
"HFish/error"
2020-05-09 20:54:06 +08:00
"HFish/utils/conf"
2019-09-03 17:19:06 +08:00
)
func Html ( c * gin . Context ) {
2020-05-09 20:54:06 +08:00
attackCity := conf . Get ( "admin" , "attack_city" )
c . HTML ( http . StatusOK , "data.html" , gin . H {
"dataAttack" : attackCity ,
} )
2019-09-03 17:19:06 +08:00
}
2019-12-03 21:28:24 +08:00
// 统计中国攻击地区
func GetChina ( c * gin . Context ) {
resultRegion , errRegion := dbUtil . DB ( ) . Table ( "hfish_info" ) . Fields ( "region" , "count(1) AS sum" ) . Where ( "country" , "=" , "中国" ) . GroupBy ( "region" ) . OrderBy ( "sum desc" ) . Limit ( 8 ) . Get ( )
if errRegion != nil {
log . Pr ( "HFish" , "127.0.0.1" , "统计攻击地区失败" , errRegion )
}
var regionList [ ] map [ string ] string
for k := range resultRegion {
regionMap := make ( map [ string ] string )
regionMap [ "name" ] = resultRegion [ k ] [ "region" ] . ( string )
regionMap [ "value" ] = strconv . FormatInt ( resultRegion [ k ] [ "sum" ] . ( int64 ) , 10 )
regionList = append ( regionList , regionMap )
}
data := map [ string ] interface { } {
"regionList" : regionList ,
}
c . JSON ( http . StatusOK , gin . H {
"code" : error . ErrSuccessCode ,
"msg" : error . ErrSuccessMsg ,
"data" : data ,
} )
}
// 统计国家攻击地区
func GetCountry ( c * gin . Context ) {
resultRegion , errRegion := dbUtil . DB ( ) . Table ( "hfish_info" ) . Fields ( "country" , "count(1) AS sum" ) . Where ( "country" , "!=" , "" ) . GroupBy ( "country" ) . OrderBy ( "sum desc" ) . Limit ( 8 ) . Get ( )
if errRegion != nil {
log . Pr ( "HFish" , "127.0.0.1" , "统计攻击地区失败" , errRegion )
}
var regionList [ ] map [ string ] string
for k := range resultRegion {
regionMap := make ( map [ string ] string )
regionMap [ "name" ] = resultRegion [ k ] [ "country" ] . ( string )
regionMap [ "value" ] = strconv . FormatInt ( resultRegion [ k ] [ "sum" ] . ( int64 ) , 10 )
regionList = append ( regionList , regionMap )
}
data := map [ string ] interface { } {
"regionList" : regionList ,
}
c . JSON ( http . StatusOK , gin . H {
"code" : error . ErrSuccessCode ,
"msg" : error . ErrSuccessMsg ,
"data" : data ,
} )
}
// 统计攻击IP地区
func GetIp ( c * gin . Context ) {
// 统计攻击IP
resultIP , errIp := dbUtil . DB ( ) . Table ( "hfish_info" ) . Fields ( "ip" , "count(1) AS sum" ) . Where ( "ip" , "!=" , "" ) . GroupBy ( "ip" ) . OrderBy ( "sum desc" ) . Limit ( 10 ) . Get ( )
if errIp != nil {
log . Pr ( "HFish" , "127.0.0.1" , "统计攻击IP失败" , errIp )
}
var ipList [ ] map [ string ] string
for k := range resultIP {
ipMap := make ( map [ string ] string )
ipMap [ "name" ] = resultIP [ k ] [ "ip" ] . ( string )
ipMap [ "value" ] = strconv . FormatInt ( resultIP [ k ] [ "sum" ] . ( int64 ) , 10 )
ipList = append ( ipList , ipMap )
}
data := map [ string ] interface { } {
"ipList" : ipList ,
}
c . JSON ( http . StatusOK , gin . H {
"code" : error . ErrSuccessCode ,
"msg" : error . ErrSuccessMsg ,
"data" : data ,
} )
}
// 统计攻击类型
func GetType ( c * gin . Context ) {
// 统计攻击IP
resultType , errType := dbUtil . DB ( ) . Table ( "hfish_info" ) . Fields ( "type" , "count(1) AS sum" ) . Where ( "type" , "!=" , "" ) . GroupBy ( "type" ) . OrderBy ( "sum desc" ) . Limit ( 10 ) . Get ( )
if errType != nil {
log . Pr ( "HFish" , "127.0.0.1" , "统计攻击IP失败" , errType )
}
var typeList [ ] map [ string ] string
for k := range resultType {
typeMap := make ( map [ string ] string )
typeMap [ "name" ] = resultType [ k ] [ "type" ] . ( string )
typeMap [ "value" ] = strconv . FormatInt ( resultType [ k ] [ "sum" ] . ( int64 ) , 10 )
typeList = append ( typeList , typeMap )
}
data := map [ string ] interface { } {
"typeList" : typeList ,
}
c . JSON ( http . StatusOK , gin . H {
"code" : error . ErrSuccessCode ,
"msg" : error . ErrSuccessMsg ,
"data" : data ,
} )
}
// 获取最新数据流
func GetNewInfo ( c * gin . Context ) {
db := dbUtil . DB ( ) . Table ( "hfish_info" ) . OrderBy ( "id desc" ) . Limit ( 20 )
result , err := db . Get ( )
if err != nil {
log . Pr ( "HFish" , "127.0.0.1" , "获取最新数据流失败" , err )
}
data := map [ string ] interface { } {
"result" : result ,
}
c . JSON ( http . StatusOK , gin . H {
"code" : error . ErrSuccessCode ,
"msg" : error . ErrSuccessMsg ,
"data" : data ,
} )
}
// 获取统计账号
func GetAccountInfo ( c * gin . Context ) {
var result [ ] map [ string ] interface { }
err := dbUtil . DB ( ) . Table ( & result ) . Query ( "select account,count(0) as sum from hfish_passwd GROUP BY account ORDER BY sum desc;" )
if err != nil {
log . Pr ( "HFish" , "127.0.0.1" , "查询SQL失败" , err )
}
var resultMap [ ] map [ string ] string
for k := range result {
rMap := make ( map [ string ] string )
rMap [ "name" ] = result [ k ] [ "account" ] . ( string )
rMap [ "value" ] = strconv . FormatInt ( result [ k ] [ "sum" ] . ( int64 ) , 10 )
resultMap = append ( resultMap , rMap )
}
c . JSON ( http . StatusOK , gin . H {
"code" : error . ErrSuccessCode ,
"msg" : error . ErrSuccessMsg ,
"data" : resultMap ,
} )
}
// 获取统计密码
func GetPasswdInfo ( c * gin . Context ) {
var result [ ] map [ string ] interface { }
err := dbUtil . DB ( ) . Table ( & result ) . Query ( "select password,count(0) as sum from hfish_passwd GROUP BY password ORDER BY sum desc;" )
if err != nil {
log . Pr ( "HFish" , "127.0.0.1" , "查询SQL失败" , err )
}
var resultMap [ ] map [ string ] string
for k := range result {
rMap := make ( map [ string ] string )
rMap [ "name" ] = result [ k ] [ "password" ] . ( string )
rMap [ "value" ] = strconv . FormatInt ( result [ k ] [ "sum" ] . ( int64 ) , 10 )
resultMap = append ( resultMap , rMap )
}
c . JSON ( http . StatusOK , gin . H {
"code" : error . ErrSuccessCode ,
2020-05-09 20:54:06 +08:00
"msg" : error . ErrSuccessMsg ,
"data" : resultMap ,
} )
}
// 获取全球攻击数量
func GetWordInfo ( c * gin . Context ) {
var result [ ] map [ string ] interface { }
2020-05-12 19:55:22 +08:00
err := dbUtil . DB ( ) . Table ( & result ) . Query ( "select region,count(1) as sum from hfish_info GROUP BY region;" )
2020-05-09 20:54:06 +08:00
if err != nil {
log . Pr ( "HFish" , "127.0.0.1" , "查询SQL失败" , err )
}
var resultMap [ ] map [ string ] string
for k := range result {
rMap := make ( map [ string ] string )
rMap [ "name" ] = result [ k ] [ "region" ] . ( string )
rMap [ "value" ] = strconv . FormatInt ( result [ k ] [ "sum" ] . ( int64 ) , 10 )
resultMap = append ( resultMap , rMap )
}
c . JSON ( http . StatusOK , gin . H {
"code" : error . ErrSuccessCode ,
2019-12-03 21:28:24 +08:00
"msg" : error . ErrSuccessMsg ,
"data" : resultMap ,
} )
}
2019-09-03 17:19:06 +08:00
// 往下是 Web Socket 代码
// 存储全部客户端连接
var connClient = make ( map [ * websocket . Conn ] bool )
// 去除跨域限制
var upGrader = websocket . Upgrader {
CheckOrigin : func ( r * http . Request ) bool {
return true
} ,
}
// 客户端连接
func Ws ( c * gin . Context ) {
ws , err := upGrader . Upgrade ( c . Writer , c . Request , nil )
if err != nil {
// 创建 WebSocket 失败
return
}
connClient [ ws ] = true
defer ws . Close ( )
for {
_ , _ , err := ws . ReadMessage ( )
if err != nil {
// 客户端断开
connClient [ ws ] = false
break
}
}
}
// 发送消息
func Send ( data map [ string ] interface { } ) {
for k , v := range connClient {
if v {
err := k . WriteJSON ( data )
if err != nil {
fmt . Println ( err )
break
}
}
}
}
// 生成数据 JSON
func MakeDataJson ( typex string , data map [ string ] interface { } ) map [ string ] interface { } {
result := map [ string ] interface { } {
"type" : typex ,
"data" : data ,
}
return result
}