2025-02-27 22:14:36 +08:00
package attackevent
import (
"bytes"
2025-03-11 15:07:17 +08:00
"database/sql"
2025-02-27 22:14:36 +08:00
"dt_automate/conn"
2025-03-11 15:07:17 +08:00
"dt_automate/dbpool"
2025-02-27 22:14:36 +08:00
"dt_automate/tool"
"encoding/json"
2025-03-11 15:07:17 +08:00
"fmt"
2025-02-27 22:14:36 +08:00
"log"
"math"
"net/url"
"strconv"
"time"
"github.com/Esword618/unioffice/schema/soo/sml"
"github.com/Esword618/unioffice/spreadsheet"
)
// var cookieStr string
// var Counts int //存储总条数
// var err error
// 传入cookie
2025-03-11 15:07:17 +08:00
func Fw_event ( cookieStr , timeStr string ) {
2025-02-27 22:14:36 +08:00
ss := spreadsheet . New ( )
sheet := ss . AddSheet ( )
// sheet.SetFrozen(true, false)
v := sheet . InitialView ( )
v . SetState ( sml . ST_PaneStateFrozen )
v . SetXSplit ( 0 ) //冻结列
v . SetYSplit ( 1 ) //冻结行
// v.SetTopLeft("B2")
// // 获取第一个工作表
// sheet, err := ss.GetSheet("Sheet2")
// if err != nil {
// log.Println(err)
// }
sheet . Cell ( "A1" ) . SetString ( "序号" )
sheet . Cell ( "B1" ) . SetString ( "攻击时间" )
sheet . Cell ( "C1" ) . SetString ( "源安全域" )
sheet . Cell ( "D1" ) . SetString ( "目的安全域" )
sheet . Cell ( "E1" ) . SetString ( "源IP" )
sheet . Cell ( "F1" ) . SetString ( "目的IP" )
sheet . Cell ( "G1" ) . SetString ( "目的端口" )
sheet . Cell ( "H1" ) . SetString ( "威胁名称" )
sheet . Cell ( "I1" ) . SetString ( "攻击类别" )
sheet . Cell ( "J1" ) . SetString ( "攻击子类别" )
sheet . Cell ( "K1" ) . SetString ( "应用协议" )
sheet . Cell ( "L1" ) . SetString ( "CVE" )
sheet . Cell ( "M1" ) . SetString ( "域名( host) " )
sheet . Cell ( "N1" ) . SetString ( "请求路径" )
sheet . Cell ( "O1" ) . SetString ( "参数" )
2025-02-28 18:23:02 +08:00
sheet . Cell ( "P1" ) . SetString ( "源ip地区" )
2025-03-06 22:00:59 +08:00
log . Println ( "生成表格列名完成" )
2025-03-11 15:07:17 +08:00
//计算时间范围( 2023-01-01-2023-01-05) 示例
//2023-01-01
startTime , _ := time . Parse ( "2006-01-02" , timeStr ) //之前的时间
endTime , _ := time . Parse ( "2006-01-02" , time . Unix ( tool . Timestamp ( "second" ) , 0 ) . Format ( "2006-01-02" ) ) //当前时间
//获取当前事件
2025-02-27 22:14:36 +08:00
2025-03-11 15:07:17 +08:00
// 计算时间段分成一天一段
for current := startTime ; current . Before ( endTime ) || current . Equal ( endTime ) ; {
// 当天的开始时间( 00:00:00)
dayStart := time . Date ( current . Year ( ) , current . Month ( ) , current . Day ( ) , 0 , 0 , 0 , 0 , current . Location ( ) )
// 当天的结束时间( 23:59:59)
dayEnd := dayStart . AddDate ( 0 , 0 , 1 ) . Add ( - 1 * time . Nanosecond )
// 如果当前计算的结束时间超过endTime, 则将endTime作为结束时间
if dayEnd . After ( endTime ) {
dayEnd = time . Date ( endTime . Year ( ) , endTime . Month ( ) , endTime . Day ( ) , 23 , 59 , 59 , 999999999 , endTime . Location ( ) )
2025-02-27 22:14:36 +08:00
}
2025-03-07 18:15:26 +08:00
2025-03-11 15:07:17 +08:00
fmt . Printf ( "从 %s 到 %s\n" , dayStart . Format ( "2006-01-02T15:04:05" ) , dayEnd . Format ( "2006-01-02T15:04:05" ) )
2025-03-07 18:15:26 +08:00
2025-03-11 15:07:17 +08:00
// 构建 x-www-form-urlencoded 格式的请求体
values := url . Values { }
values . Add ( "xml" , "<rpc message-id='101' xmlns='urn:ietf:params:xml:ns:netconf:base:1.0' xmlns:web='urn:ietf:params:xml:ns:netconf:base:1.0'><get-bulk><filter type='subtree'><top xmlns='http://www.unis.cn/netconf/data:1.0' xmlns:web='http://www.unis.cn/netconf/base:1.0' xmlns:data='http://www.unis.cn/netconf/data:1.0'><NTOP><LogPaging><Log><LogType>1</LogType><UserID/><ID/><TimeFilter><StartTime>" + dayStart . Format ( "2006-01-02T15:04:05" ) + "</StartTime><EndTime>" + dayEnd . Format ( "2006-01-02T15:04:05" ) + "</EndTime></TimeFilter><PageNo>1</PageNo><CountPerPage>200</CountPerPage><TotalCounts/><InputJSON>{"SrcZoneName":"Untrust","DestZoneName":"Trust"}</InputJSON><OutputJSON/></Log></LogPaging></NTOP></top></filter></get-bulk></rpc>" )
values . Add ( "req_menu" , "M_Monitor/M_AtkLog/M_ThreatLog" )
//请求头信息
header := map [ string ] string {
"Content-Type" : "application/x-www-form-urlencoded; charset=UTF-8" ,
"referer" : "https://11.2.68.146/wnm/frame/index.php" ,
"cookie" : cookieStr ,
2025-02-27 22:14:36 +08:00
}
2025-03-11 15:07:17 +08:00
//查询数据//请求数据体
security_event_data := conn . DT_POST ( "https://11.2.68.146/wnm/get.j" , header , bytes . NewBufferString ( values . Encode ( ) ) )
//获取页数
count_pages , _ := strconv . Atoi ( Date_v ( security_event_data ) . NTOP . LogPaging [ 0 ] . TotalCounts )
if count_pages < 200 {
for _ , k := range Date_v ( security_event_data ) . NTOP . LogPaging {
// log.Println(len(sheet.Rows()))
2025-03-07 18:15:26 +08:00
con := len ( sheet . Rows ( ) ) + 1
2025-02-28 18:23:02 +08:00
// IP := conn.DT_GET("http://ip-api.com/json/"+k.OutputJSON.(map[string]interface{})["SrcIPAddr"].(string)+"?lang=zh-CN", nil, nil)
2025-03-07 18:15:26 +08:00
sheet . Cell ( "A" + strconv . Itoa ( con ) ) . SetString ( strconv . Itoa ( con - 1 ) ) // 第一列 (A1)
sheet . Cell ( "B" + strconv . Itoa ( con ) ) . SetString ( k . OutputJSON . ( map [ string ] interface { } ) [ "Time" ] . ( string ) )
sheet . Cell ( "C" + strconv . Itoa ( con ) ) . SetString ( k . OutputJSON . ( map [ string ] interface { } ) [ "SrcZoneName" ] . ( string ) )
sheet . Cell ( "D" + strconv . Itoa ( con ) ) . SetString ( k . OutputJSON . ( map [ string ] interface { } ) [ "DestZoneName" ] . ( string ) )
sheet . Cell ( "E" + strconv . Itoa ( con ) ) . SetString ( k . OutputJSON . ( map [ string ] interface { } ) [ "SrcIPAddr" ] . ( string ) )
sheet . Cell ( "F" + strconv . Itoa ( con ) ) . SetString ( k . OutputJSON . ( map [ string ] interface { } ) [ "DestIPAddr" ] . ( string ) )
sheet . Cell ( "G" + strconv . Itoa ( con ) ) . SetString ( strconv . FormatFloat ( k . OutputJSON . ( map [ string ] interface { } ) [ "DestPort" ] . ( float64 ) , 'f' , - 1 , 64 ) )
sheet . Cell ( "H" + strconv . Itoa ( con ) ) . SetString ( k . OutputJSON . ( map [ string ] interface { } ) [ "ThreatName" ] . ( string ) )
sheet . Cell ( "I" + strconv . Itoa ( con ) ) . SetString ( k . OutputJSON . ( map [ string ] interface { } ) [ "MethodNameCN" ] . ( string ) )
sheet . Cell ( "J" + strconv . Itoa ( con ) ) . SetString ( k . OutputJSON . ( map [ string ] interface { } ) [ "MethodSubNameCN" ] . ( string ) )
sheet . Cell ( "K" + strconv . Itoa ( con ) ) . SetString ( k . OutputJSON . ( map [ string ] interface { } ) [ "Application" ] . ( string ) )
sheet . Cell ( "L" + strconv . Itoa ( con ) ) . SetString ( k . OutputJSON . ( map [ string ] interface { } ) [ "CVE" ] . ( string ) )
sheet . Cell ( "M" + strconv . Itoa ( con ) ) . SetString ( k . OutputJSON . ( map [ string ] interface { } ) [ "HttpHost" ] . ( string ) )
sheet . Cell ( "N" + strconv . Itoa ( con ) ) . SetString ( k . OutputJSON . ( map [ string ] interface { } ) [ "HttpFirstLine" ] . ( string ) )
sheet . Cell ( "O" + strconv . Itoa ( con ) ) . SetString ( k . OutputJSON . ( map [ string ] interface { } ) [ "Payload" ] . ( string ) )
2025-03-11 15:07:17 +08:00
// sheet.Cell("P" + strconv.Itoa(Con)).SetString(Date_get(IP).(map[string]interface{})["country"].(string) + "." + Date_get(IP).(map[string]interface{})["city"].(string) + "/" + Date_get(IP).(map[string]interface{})["isp"].(string))
log . Printf ( "开始插入%s数据: %d %s" , dayStart . Format ( "2006-01-02T15:04:05" ) , con , k . OutputJSON . ( map [ string ] interface { } ) [ "SrcIPAddr" ] . ( string ) )
//查询数据库中是否有重复数据
//查询sql 获取用户信息
rows , err := dbpool . QueryRows ( "SELECT `DT_TIME` FROM `dt_zgdz`.`dt_attack_event` WHERE DT_TIME = ?;" , k . OutputJSON . ( map [ string ] interface { } ) [ "Time" ] . ( string ) )
if err != nil {
log . Println ( err )
}
defer rows . Close ( )
var timeStr sql . NullString
// var typecho_userss []string
for rows . Next ( ) {
if err := rows . Scan ( & timeStr ) ; err != nil {
log . Println ( err )
}
// typecho_userss = append(typecho_userss, timeStr)
}
log . Println ( timeStr )
if err := rows . Err ( ) ; err != nil {
log . Fatal ( err )
}
if k . OutputJSON . ( map [ string ] interface { } ) [ "Time" ] . ( string ) != timeStr . String {
//调用ExecteSQL函数执行插入语句
result , err := dbpool . ExecuteSQL ( "INSERT INTO `dt_zgdz`.`dt_attack_event` (`DT_ID`, `DT_TIME`, `DT_SRCZONENAME`, `DT_DESTZONENAME`, `DT_SRCIPADDR`, `DT_DESTIPADDR`, `DT_DESTPORT`, `DT_THREATNAME`, `DT_METHODNAMECN`, `DT_METHODSUBNAMECN`, `DT_AOOLICATION`, `DT_CVE`, `DT_HTTPHOST`, `DT_HTTPFIRSTLINE`, `DT_PAYLOAD`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);" , strconv . Itoa ( con - 1 ) , k . OutputJSON . ( map [ string ] interface { } ) [ "Time" ] . ( string ) , k . OutputJSON . ( map [ string ] interface { } ) [ "SrcZoneName" ] . ( string ) , k . OutputJSON . ( map [ string ] interface { } ) [ "DestZoneName" ] . ( string ) , k . OutputJSON . ( map [ string ] interface { } ) [ "SrcIPAddr" ] . ( string ) , k . OutputJSON . ( map [ string ] interface { } ) [ "DestIPAddr" ] . ( string ) , strconv . FormatFloat ( k . OutputJSON . ( map [ string ] interface { } ) [ "DestPort" ] . ( float64 ) , 'f' , - 1 , 64 ) , k . OutputJSON . ( map [ string ] interface { } ) [ "ThreatName" ] . ( string ) , k . OutputJSON . ( map [ string ] interface { } ) [ "MethodNameCN" ] . ( string ) , k . OutputJSON . ( map [ string ] interface { } ) [ "MethodSubNameCN" ] . ( string ) , k . OutputJSON . ( map [ string ] interface { } ) [ "Application" ] . ( string ) , k . OutputJSON . ( map [ string ] interface { } ) [ "CVE" ] . ( string ) , k . OutputJSON . ( map [ string ] interface { } ) [ "HttpHost" ] . ( string ) , k . OutputJSON . ( map [ string ] interface { } ) [ "HttpFirstLine" ] . ( string ) , k . OutputJSON . ( map [ string ] interface { } ) [ "Payload" ] . ( string ) )
if err != nil {
log . Println ( err )
}
// 获取插入操作的最后插入ID和受影响的行数
lastInsertId , err := result . LastInsertId ( )
if err != nil {
log . Fatal ( err )
}
rowsAffected , err := result . RowsAffected ( )
if err != nil {
log . Fatal ( err )
}
log . Printf ( "Last Insert ID: %d, Rows Affected: %d\n" , lastInsertId , rowsAffected )
}
2025-02-27 22:14:36 +08:00
}
2025-03-11 15:07:17 +08:00
} else {
//计算页数
totalPages := int ( math . Floor ( float64 ( count_pages ) ) / float64 ( 200 ) + 1 )
for i := 0 ; i < totalPages ; i ++ {
values := url . Values { }
values . Add ( "xml" , "<rpc message-id='101' xmlns='urn:ietf:params:xml:ns:netconf:base:1.0' xmlns:web='urn:ietf:params:xml:ns:netconf:base:1.0'><get-bulk><filter type='subtree'><top xmlns='http://www.unis.cn/netconf/data:1.0' xmlns:web='http://www.unis.cn/netconf/base:1.0' xmlns:data='http://www.unis.cn/netconf/data:1.0'><NTOP><LogPaging><Log><LogType>1</LogType><UserID/><ID/><TimeFilter><StartTime>" + dayStart . Format ( "2006-01-02T15:04:05" ) + "</StartTime><EndTime>" + dayEnd . Format ( "2006-01-02T15:04:05" ) + "</EndTime></TimeFilter><PageNo>" + strconv . Itoa ( i + 1 ) + "</PageNo><CountPerPage>200</CountPerPage><TotalCounts/><InputJSON>{"SrcZoneName":"Untrust","DestZoneName":"Trust"}</InputJSON><OutputJSON/></Log></LogPaging></NTOP></top></filter></get-bulk></rpc>" )
values . Add ( "req_menu" , "M_Monitor/M_AtkLog/M_ThreatLog" )
//请求头信息
header := map [ string ] string {
"Content-Type" : "application/x-www-form-urlencoded; charset=UTF-8" ,
"referer" : "https://11.2.68.146/wnm/frame/index.php" ,
"cookie" : cookieStr ,
}
//获取当天每页数据
daydata := conn . DT_POST ( "https://11.2.68.146/wnm/get.j" , header , bytes . NewBufferString ( values . Encode ( ) ) )
for _ , k := range Date_v ( daydata ) . NTOP . LogPaging {
// log.Println(len(sheet.Rows()))
con := len ( sheet . Rows ( ) ) + 1
// IP := conn.DT_GET("http://ip-api.com/json/"+k.OutputJSON.(map[string]interface{})["SrcIPAddr"].(string)+"?lang=zh-CN", nil, nil)
sheet . Cell ( "A" + strconv . Itoa ( con ) ) . SetString ( strconv . Itoa ( con - 1 ) ) // 第一列 (A1)
sheet . Cell ( "B" + strconv . Itoa ( con ) ) . SetString ( k . OutputJSON . ( map [ string ] interface { } ) [ "Time" ] . ( string ) )
sheet . Cell ( "C" + strconv . Itoa ( con ) ) . SetString ( k . OutputJSON . ( map [ string ] interface { } ) [ "SrcZoneName" ] . ( string ) )
sheet . Cell ( "D" + strconv . Itoa ( con ) ) . SetString ( k . OutputJSON . ( map [ string ] interface { } ) [ "DestZoneName" ] . ( string ) )
sheet . Cell ( "E" + strconv . Itoa ( con ) ) . SetString ( k . OutputJSON . ( map [ string ] interface { } ) [ "SrcIPAddr" ] . ( string ) )
sheet . Cell ( "F" + strconv . Itoa ( con ) ) . SetString ( k . OutputJSON . ( map [ string ] interface { } ) [ "DestIPAddr" ] . ( string ) )
sheet . Cell ( "G" + strconv . Itoa ( con ) ) . SetString ( strconv . FormatFloat ( k . OutputJSON . ( map [ string ] interface { } ) [ "DestPort" ] . ( float64 ) , 'f' , - 1 , 64 ) )
sheet . Cell ( "H" + strconv . Itoa ( con ) ) . SetString ( k . OutputJSON . ( map [ string ] interface { } ) [ "ThreatName" ] . ( string ) )
sheet . Cell ( "I" + strconv . Itoa ( con ) ) . SetString ( k . OutputJSON . ( map [ string ] interface { } ) [ "MethodNameCN" ] . ( string ) )
sheet . Cell ( "J" + strconv . Itoa ( con ) ) . SetString ( k . OutputJSON . ( map [ string ] interface { } ) [ "MethodSubNameCN" ] . ( string ) )
sheet . Cell ( "K" + strconv . Itoa ( con ) ) . SetString ( k . OutputJSON . ( map [ string ] interface { } ) [ "Application" ] . ( string ) )
sheet . Cell ( "L" + strconv . Itoa ( con ) ) . SetString ( k . OutputJSON . ( map [ string ] interface { } ) [ "CVE" ] . ( string ) )
sheet . Cell ( "M" + strconv . Itoa ( con ) ) . SetString ( k . OutputJSON . ( map [ string ] interface { } ) [ "HttpHost" ] . ( string ) )
sheet . Cell ( "N" + strconv . Itoa ( con ) ) . SetString ( k . OutputJSON . ( map [ string ] interface { } ) [ "HttpFirstLine" ] . ( string ) )
sheet . Cell ( "O" + strconv . Itoa ( con ) ) . SetString ( k . OutputJSON . ( map [ string ] interface { } ) [ "Payload" ] . ( string ) )
// sheet.Cell("P" + strconv.Itoa(Con)).SetString(Date_get(IP).(map[string]interface{})["country"].(string) + "." + Date_get(IP).(map[string]interface{})["city"].(string) + "/" + Date_get(IP).(map[string]interface{})["isp"].(string))
log . Printf ( "开始插入%s数据: %d %s" , dayStart . Format ( "2006-01-02T15:04:05" ) , con , k . OutputJSON . ( map [ string ] interface { } ) [ "SrcIPAddr" ] . ( string ) )
// 调用ExecuteSQL函数执行插入操作
//查询数据库中是否有重复数据
//查询sql 获取用户信息
rows , err := dbpool . QueryRows ( "SELECT `DT_TIME` FROM `dt_zgdz`.`dt_attack_event` WHERE DT_TIME = ?;" , k . OutputJSON . ( map [ string ] interface { } ) [ "Time" ] . ( string ) )
if err != nil {
log . Println ( err )
}
defer rows . Close ( )
var timeStr sql . NullString
// var typecho_userss []string
for rows . Next ( ) {
if err := rows . Scan ( & timeStr ) ; err != nil {
log . Println ( err )
}
// typecho_userss = append(typecho_userss, timeStr)
}
if err := rows . Err ( ) ; err != nil {
log . Fatal ( err )
}
if k . OutputJSON . ( map [ string ] interface { } ) [ "Time" ] . ( string ) != timeStr . String {
result , err := dbpool . ExecuteSQL ( "INSERT INTO `dt_zgdz`.`dt_attack_event` (`DT_ID`, `DT_TIME`, `DT_SRCZONENAME`, `DT_DESTZONENAME`, `DT_SRCIPADDR`, `DT_DESTIPADDR`, `DT_DESTPORT`, `DT_THREATNAME`, `DT_METHODNAMECN`, `DT_METHODSUBNAMECN`, `DT_AOOLICATION`, `DT_CVE`, `DT_HTTPHOST`, `DT_HTTPFIRSTLINE`, `DT_PAYLOAD`, `DT_CUNTRY`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);" , strconv . Itoa ( con - 1 ) , k . OutputJSON . ( map [ string ] interface { } ) [ "Time" ] . ( string ) , k . OutputJSON . ( map [ string ] interface { } ) [ "SrcZoneName" ] . ( string ) , k . OutputJSON . ( map [ string ] interface { } ) [ "DestZoneName" ] . ( string ) , k . OutputJSON . ( map [ string ] interface { } ) [ "SrcIPAddr" ] . ( string ) , k . OutputJSON . ( map [ string ] interface { } ) [ "DestIPAddr" ] . ( string ) , strconv . FormatFloat ( k . OutputJSON . ( map [ string ] interface { } ) [ "DestPort" ] . ( float64 ) , 'f' , - 1 , 64 ) , k . OutputJSON . ( map [ string ] interface { } ) [ "ThreatName" ] . ( string ) , k . OutputJSON . ( map [ string ] interface { } ) [ "MethodNameCN" ] . ( string ) , k . OutputJSON . ( map [ string ] interface { } ) [ "MethodSubNameCN" ] . ( string ) , k . OutputJSON . ( map [ string ] interface { } ) [ "Application" ] . ( string ) , k . OutputJSON . ( map [ string ] interface { } ) [ "CVE" ] . ( string ) , k . OutputJSON . ( map [ string ] interface { } ) [ "HttpHost" ] . ( string ) , k . OutputJSON . ( map [ string ] interface { } ) [ "HttpFirstLine" ] . ( string ) , k . OutputJSON . ( map [ string ] interface { } ) [ "Payload" ] . ( string ) )
if err != nil {
log . Println ( err )
}
// 获取插入操作的最后插入ID和受影响的行数
lastInsertId , err := result . LastInsertId ( )
if err != nil {
log . Fatal ( err )
}
rowsAffected , err := result . RowsAffected ( )
if err != nil {
log . Fatal ( err )
}
log . Printf ( "Last Insert ID: %d, Rows Affected: %d\n" , lastInsertId , rowsAffected )
}
2025-03-07 18:15:26 +08:00
2025-03-11 15:07:17 +08:00
}
}
}
// 移动到下一天
current = current . AddDate ( 0 , 0 , 1 )
2025-02-27 22:14:36 +08:00
}
// 保存修改后的 Excel 文件
if err := ss . Validate ( ) ; err != nil {
log . Fatalf ( "验证文件时出错: %s" , err )
}
2025-02-28 16:29:58 +08:00
if err := ss . SaveToFile ( "防火墙安全事件" + time . Unix ( tool . Timestamp ( "second" ) , 0 ) . Format ( "20060102" ) + ".xlsx" ) ; err != nil {
2025-02-27 22:14:36 +08:00
log . Fatalf ( "保存文件时出错: %s" , err )
}
}
2025-02-28 18:23:02 +08:00
func Date_get ( jsonSter string ) interface { } {
var jsonstr interface { }
err := json . Unmarshal ( [ ] byte ( jsonSter ) , & jsonstr )
if err != nil {
log . Fatalf ( "JSON 解析失败: %v" , err )
}
return jsonstr
}
2025-02-27 22:14:36 +08:00
func Date_v ( jsonStr string ) * Person {
var person Person
err := json . Unmarshal ( [ ] byte ( jsonStr ) , & person )
if err != nil {
log . Fatalf ( "JSON 解析失败: %v" , err )
}
// 手动解析 InputJSON 和 OutputJSON 字段
for i := range person . NTOP . LogPaging {
logPaging := & person . NTOP . LogPaging [ i ]
// 解析 InputJSON
var inputJSON map [ string ] interface { }
err := json . Unmarshal ( [ ] byte ( logPaging . InputJSON . ( string ) ) , & inputJSON )
if err != nil {
log . Fatalf ( "解析 InputJSON 失败: %v" , err )
}
logPaging . InputJSON = inputJSON // 更新为解析后的数据
// 解析 OutputJSON
var outputJSON map [ string ] interface { }
err = json . Unmarshal ( [ ] byte ( logPaging . OutputJSON . ( string ) ) , & outputJSON )
if err != nil {
log . Fatalf ( "解析 OutputJSON 失败: %v" , err )
}
logPaging . OutputJSON = outputJSON // 更新为解析后的数据
}
// 输出结果
// log.Printf("解析结果: %+v\n", person.NTOP.LogPaging[4].OutputJSON.(map[string]interface{})["SrcPort"])
return & person
}
type Person struct {
NTOP NTOP ` json:"NTOP" `
}
type NTOP struct {
LogPaging [ ] LogPaging ` json:"LogPaging" `
}
type LogPaging struct {
LogType string ` json:"LogType" ` //日志ID
ID string ` json:"ID" `
UserID string ` json:"UserID" `
PageNo string ` json:"PageNo" ` //页数
CountPerPage string ` json:"CountPerPage" ` //每页计数
TotalCounts string ` json:"TotalCounts" ` //总条数
InputJSON interface { } ` json:"InputJSON" ` //输入参数
OutputJSON interface { } ` json:"OutputJSON" ` //输出参数
TimeFilter TimeFilter ` json:"TimeFilter" ` //本次查询时间区间
}
type InputJSON struct {
SrcZoneName string ` json:"SrcZoneName" ` //源安全域
DestZoneName string ` json:"DestZoneName" ` //目的安全域
}
type OutputJSON struct {
SrcPort string ` json:"SrcPort" ` //源端口
DestPort string ` json:"DestPort" ` //目的端口
Action string ` json:"Action" `
AttackCount string ` json:"AttackCount" ` //攻击计数
SrcVrfIndex string ` json:"SrcVrfIndex" `
ThreatID string ` json:"ThreatID" `
Severity string ` json:"Severity" `
HddInfo string ` json:"HddInfo" `
Application string ` json:"Application" ` //应用协议
ThreatName string ` json:"ThreatName" ` //威胁名称
SrcRegion string ` json:"SrcRegion" ` //源区域
DestRegion string ` json:"DestRegion" ` //目的区域
ThreatType string ` json:"ThreatType" ` //威胁类型 {入侵防御}
Time string ` json:"Time" ` //时间
ContextName string ` json:"ContextName" ` //上下文名称
Policy string ` json:"Policy" ` //策略
Protocol string ` json:"Protocol" ` //传输协议
SrcIPAddr string ` json:"SrcIPAddr" ` //源IP
User string ` json:"User" ` //用户
DestIPAddr string ` json:"DestIPAddr" ` //目的IP
SrcZoneName string ` json:"SrcZoneName" ` //源安全域
DestZoneName string ` json:"DestZoneName" ` //目的安全域
CVE string ` json:"CVE" ` //漏洞披露
MSB string ` json:"MSB" `
BID string ` json:"BID" `
RealIP string ` json:"RealIP" `
CapturePktName string ` json:"CapturePktName" `
HttpHost string ` json:"HttpHost" ` //host头
HttpFirstLine string ` json:"HttpFirstLine" ` //请求路径
Payload string ` json:"Payload" ` //请求数据
MethodName string ` json:"MethodName" ` //方法名称
MethodNameCN string ` json:"MethodNameCN" ` //方法名称中国(攻击类别)
MethodSubName string ` json:"MethodSubName" ` //方法子名称
MethodSubNameCN string ` json:"MethodSubNameCN" ` //方法子名称中国(具体攻击形式)
LoginUserName string ` json:"LoginUserName" `
LoginPassword string ` json:"LoginPassword" `
}
type TimeFilter struct {
StartTime string ` json:"StartTime" `
EndTime string ` json:"EndTime" `
}