dt_automate/attack_event/fw.go
2025-02-27 15:10:41 +08:00

229 lines
12 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package attackevent
import (
"bytes"
"dt_automate/conn"
"dt_automate/tool"
"encoding/json"
"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
func Fw_event(cookieStr string) {
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("域名host")
//当前时间
EndTime := time.Unix(tool.Timestamp("second"), 0).Format("2006-01-02T15:04:05")
//今天0点
StartTime := time.Date(time.Now().Year(), time.Now().Month(), time.Now().Day(), 0, 0, 0, 0, time.Now().Location()).Format("2006-01-02T15:04:05")
//昨天23点59分59秒
EndTime_1 := time.Date(time.Now().Year(), time.Now().Month(), time.Now().Day(), 0, 0, 0, 0, time.Now().Location()).Add(-1 * time.Second).Format("2006-01-02T15:04:05")
StartTime_1 := time.Date(time.Now().Year(), time.Now().Month(), time.Now().Day(), 0, 0, 0, 0, time.Now().Location()).Add(-8 * time.Hour).Format("2006-01-02T15:04:05")
// log.Println(EndTime_1)
// log.Println(StartTime_1)
// 构建 x-www-form-urlencoded 格式的请求体
//今天0点到现在的攻击事件
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>"+StartTime+"</StartTime><EndTime>"+EndTime+"</EndTime></TimeFilter><PageNo>1</PageNo><CountPerPage>200</CountPerPage><TotalCounts/><InputJSON>{&#34;SrcZoneName&#34;:&#34;Untrust&#34;,&#34;DestZoneName&#34;:&#34;Trust&#34;}</InputJSON><OutputJSON/></Log></LogPaging></NTOP></top></filter></get-bulk></rpc>")
values.Add("req_menu", "M_Monitor/M_AtkLog/M_ThreatLog")
//昨天下午16点到晚上23点59分59秒的攻击事件
values_1 := url.Values{}
values_1.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>"+StartTime_1+"</StartTime><EndTime>"+EndTime_1+"</EndTime></TimeFilter><PageNo>1</PageNo><CountPerPage>200</CountPerPage><TotalCounts/><InputJSON>{&#34;SrcZoneName&#34;:&#34;Untrust&#34;,&#34;DestZoneName&#34;:&#34;Trust&#34;}</InputJSON><OutputJSON/></Log></LogPaging></NTOP></top></filter></get-bulk></rpc>")
values_1.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,
}
//先查询昨天的事件
body := conn.DT_POST("https://11.2.68.146/wnm/get.j", header, bytes.NewBufferString(values_1.Encode()))
var bodys Person
json.Unmarshal(body, &bodys)
var Con int //插入总数
//存储昨日攻击事件
if bodys.LogPaging[0].TotalCounts > "200" {
a, err := strconv.ParseFloat(bodys.LogPaging[0].TotalCounts, 64)
if err != nil {
log.Println(err)
}
log.Println("昨日查询到总条数:", a)
totalPages := int(math.Floor(float64(a))/float64(200) + 1)
log.Println(totalPages)
for i := 1; i < totalPages+1; i++ {
values_1 := url.Values{}
values_1.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>"+StartTime_1+"</StartTime><EndTime>"+EndTime_1+"</EndTime></TimeFilter><PageNo>"+strconv.Itoa(i)+"</PageNo><CountPerPage>200</CountPerPage><TotalCounts/><InputJSON>{&#34;SrcZoneName&#34;:&#34;Untrust&#34;,&#34;DestZoneName&#34;:&#34;Trust&#34;}</InputJSON><OutputJSON/></Log></LogPaging></NTOP></top></filter></get-bulk></rpc>")
values_1.Add("req_menu", "M_Monitor/M_AtkLog/M_ThreatLog")
body := conn.DT_POST("https://11.2.68.146/wnm/get.j", header, bytes.NewBufferString(values_1.Encode()))
var bodys Person
json.Unmarshal(body, &bodys)
log.Println(values_1, i)
for v, k := range bodys.LogPaging {
Con = v + 2
sheet.Cell("A" + strconv.Itoa(Con)).SetString(strconv.Itoa(Con)) // 第一列 (A1)
sheet.Cell("B" + strconv.Itoa(Con)).SetString(k.OutputJSON.Time)
sheet.Cell("C" + strconv.Itoa(Con)).SetString(k.OutputJSON.SrcZoneName)
sheet.Cell("D" + strconv.Itoa(Con)).SetString(k.OutputJSON.DestZoneName)
sheet.Cell("E" + strconv.Itoa(Con)).SetString(k.OutputJSON.SrcIPAddr)
sheet.Cell("F" + strconv.Itoa(Con)).SetString(k.OutputJSON.DestIPAddr)
sheet.Cell("G" + strconv.Itoa(Con)).SetString(k.OutputJSON.DestPort)
sheet.Cell("H" + strconv.Itoa(Con)).SetString(k.OutputJSON.ThreatName)
sheet.Cell("I" + strconv.Itoa(Con)).SetString(k.OutputJSON.MethodNameCN)
sheet.Cell("J" + strconv.Itoa(Con)).SetString(k.OutputJSON.MethodSubNameCN)
sheet.Cell("K" + strconv.Itoa(Con)).SetString(k.OutputJSON.Application)
sheet.Cell("L" + strconv.Itoa(Con)).SetString(k.OutputJSON.HttpHost)
}
}
}
Con = Con + 1
//存储今日攻击事件
body_1 := conn.DT_POST("https://11.2.68.146/wnm/get.j", header, bytes.NewBufferString(values_1.Encode()))
var bodys_1 Person
json.Unmarshal(body, &body_1)
if bodys_1.LogPaging[0].TotalCounts > "200" {
a, err := strconv.ParseFloat(bodys_1.LogPaging[0].TotalCounts, 64)
if err != nil {
log.Println(err)
}
log.Println("今日查询到总条数:", a)
totalPages := int(math.Floor(float64(a))/float64(200) + 1)
log.Println(totalPages)
for i := 1; i < totalPages+1; i++ {
values_1 := url.Values{}
values_1.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>"+StartTime+"</StartTime><EndTime>"+EndTime+"</EndTime></TimeFilter><PageNo>"+strconv.Itoa(i)+"</PageNo><CountPerPage>200</CountPerPage><TotalCounts/><InputJSON>{&#34;SrcZoneName&#34;:&#34;Untrust&#34;,&#34;DestZoneName&#34;:&#34;Trust&#34;}</InputJSON><OutputJSON/></Log></LogPaging></NTOP></top></filter></get-bulk></rpc>")
values_1.Add("req_menu", "M_Monitor/M_AtkLog/M_ThreatLog")
body := conn.DT_POST("https://11.2.68.146/wnm/get.j", header, bytes.NewBufferString(values.Encode()))
var bodys Person
json.Unmarshal(body, &bodys)
log.Println(values_1, i)
for v, k := range bodys.LogPaging {
Con = v + Con
sheet.Cell("A" + strconv.Itoa(Con)).SetString(strconv.Itoa(Con)) // 第一列 (A1)
sheet.Cell("B" + strconv.Itoa(Con)).SetString(k.OutputJSON.Time)
sheet.Cell("C" + strconv.Itoa(Con)).SetString(k.OutputJSON.SrcZoneName)
sheet.Cell("D" + strconv.Itoa(Con)).SetString(k.OutputJSON.DestZoneName)
sheet.Cell("E" + strconv.Itoa(Con)).SetString(k.OutputJSON.SrcIPAddr)
sheet.Cell("F" + strconv.Itoa(Con)).SetString(k.OutputJSON.DestIPAddr)
sheet.Cell("G" + strconv.Itoa(Con)).SetString(k.OutputJSON.DestPort)
sheet.Cell("H" + strconv.Itoa(Con)).SetString(k.OutputJSON.ThreatName)
sheet.Cell("I" + strconv.Itoa(Con)).SetString(k.OutputJSON.MethodNameCN)
sheet.Cell("J" + strconv.Itoa(Con)).SetString(k.OutputJSON.MethodSubNameCN)
sheet.Cell("K" + strconv.Itoa(Con)).SetString(k.OutputJSON.Application)
sheet.Cell("L" + strconv.Itoa(Con)).SetString(k.OutputJSON.HttpHost)
}
}
}
// 保存修改后的 Excel 文件
if err := ss.Validate(); err != nil {
log.Fatalf("验证文件时出错: %s", err)
}
if err := ss.SaveToFile("防火墙安全事件.xlsx"); err != nil {
log.Fatalf("保存文件时出错: %s", err)
}
}
type Person struct {
NTOP string `json:"ntop"`
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 InputJSON `json:"inputjson"` //输入参数
OutputJSON OutputJSON `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"`
}