package attackevent import ( "bytes" "database/sql" "dt_automate/conn" "dt_automate/dbpool" "dt_automate/tool" "encoding/json" "fmt" "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 // 互联网防火墙ips数据获取 func Fw_event(cookieStr, timeStr 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("CVE") sheet.Cell("M1").SetString("域名(host)") sheet.Cell("N1").SetString("请求路径") sheet.Cell("O1").SetString("参数") sheet.Cell("P1").SetString("源ip地区") log.Println("生成表格列名完成") //计算时间范围(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")) //当前时间 //获取当前事件 // 计算时间段分成一天一段 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()) } fmt.Printf("从 %s 到 %s\n", dayStart.Format("2006-01-02T15:04:05"), dayEnd.Format("2006-01-02T15:04:05")) // 构建 x-www-form-urlencoded 格式的请求体 values := url.Values{} values.Add("xml", "1"+dayStart.Format("2006-01-02T15:04:05")+""+dayEnd.Format("2006-01-02T15:04:05")+"1200{"SrcZoneName":"Untrust","DestZoneName":"Trust"}") 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, } //查询数据//请求数据体 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())) 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)) //查询数据库中是否有重复数据 //查询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) } } } else { //计算页数 totalPages := int(math.Floor(float64(count_pages))/float64(200) + 1) for i := 0; i < totalPages; i++ { values := url.Values{} values.Add("xml", "1"+dayStart.Format("2006-01-02T15:04:05")+""+dayEnd.Format("2006-01-02T15:04:05")+""+strconv.Itoa(i+1)+"200{"SrcZoneName":"Untrust","DestZoneName":"Trust"}") 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 { //调用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) } } } } // 移动到下一天 current = current.AddDate(0, 0, 1) } // 保存修改后的 Excel 文件 if err := ss.Validate(); err != nil { log.Fatalf("验证文件时出错: %s", err) } log.Println("表格生成完成,保存文件:" + "互联网防火墙安全事件" + time.Unix(tool.Timestamp("second"), 0).Format("20060102") + ".xlsx") if err := ss.SaveToFile("互联网防火墙安全事件" + time.Unix(tool.Timestamp("second"), 0).Format("20060102") + ".xlsx"); err != nil { log.Fatalf("保存文件时出错: %s", err) } } // 政务网防火墙ips数据获取 func Zww_event(cookieStr, timeStr 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) //冻结行 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("参数") sheet.Cell("P1").SetString("源ip地区") log.Println("生成表格列名完成") //计算时间范围(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")) //当前时间 //获取当前事件 // 计算时间段分成一天一段 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()) } fmt.Printf("从 %s 到 %s\n", dayStart.Format("2006-01-02T15:04:05"), dayEnd.Format("2006-01-02T15:04:05")) // 构建 x-www-form-urlencoded 格式的请求体 values := url.Values{} values.Add("xml", "1"+dayStart.Format("2006-01-02T15:04:05")+""+dayEnd.Format("2006-01-02T15:04:05")+"1200{"SrcZoneName":"yunwei","DestZoneName":"Trust"}") 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.1.68.146/wnm/frame/index.php", "cookie": cookieStr, } //查询数据//请求数据体 security_event_data := conn.DT_POST("https://11.1.68.146/wnm/get.j", header, bytes.NewBufferString(values.Encode())) if Date_v(security_event_data).NTOP.LogPaging != nil { //获取页数 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())) 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)) //查询数据库中是否有重复数据 //查询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) // } } } else { //计算页数 totalPages := int(math.Floor(float64(count_pages))/float64(200) + 1) for i := 0; i < totalPages; i++ { values := url.Values{} values.Add("xml", "1"+dayStart.Format("2006-01-02T15:04:05")+""+dayEnd.Format("2006-01-02T15:04:05")+""+strconv.Itoa(i+1)+"200{"SrcZoneName":"yunwei","DestZoneName":"Trust"}") 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.1.68.146/wnm/frame/index.php", "cookie": cookieStr, } //获取当天每页数据 daydata := conn.DT_POST("https://11.1.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 { // //调用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) // } } } } } else { log.Println("没有数据") } // 移动到下一天 current = current.AddDate(0, 0, 1) } // 保存修改后的 Excel 文件 if err := ss.Validate(); err != nil { log.Fatalf("验证文件时出错: %s", err) } log.Println("表格生成完成,保存文件:" + "政务网防火墙安全事件" + time.Unix(tool.Timestamp("second"), 0).Format("20060102") + ".xlsx") if err := ss.SaveToFile("政务网防火墙安全事件" + time.Unix(tool.Timestamp("second"), 0).Format("20060102") + ".xlsx"); err != nil { log.Fatalf("保存文件时出错: %s", err) } } 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 } 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"` }