mirror of
https://gitee.com/lauix/HFish
synced 2025-05-14 05:38:02 +08:00
~ 上钩列表支持批量删除 ~ 上钩列表长度展示 ~ 上钩列表支持集群筛选 ~ 集群页面支持删除 ~ 改用 IPIP 本地库获取地理信息 ~ 支持 WebHook Api 通知 ~ 提供获取上钩列表 API ~ WEB,暗网蜜罐 API 移到各种服务上,抛开 Admin ~ 修复暗网蜜罐使用问题 ~ 修复集群取 IP 错误问题 ~ SSH 高交互支持
203 lines
5.4 KiB
Go
203 lines
5.4 KiB
Go
package fish
|
|
|
|
import (
|
|
"github.com/gin-gonic/gin"
|
|
"net/http"
|
|
"HFish/core/dbUtil"
|
|
"HFish/error"
|
|
"HFish/utils/page"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
// 蜜罐 页面
|
|
func Html(c *gin.Context) {
|
|
c.HTML(http.StatusOK, "fish.html", gin.H{})
|
|
}
|
|
|
|
// 获取蜜罐列表
|
|
func GetFishList(c *gin.Context) {
|
|
p, _ := c.GetQuery("page")
|
|
pageSize, _ := c.GetQuery("pageSize")
|
|
typex, _ := c.GetQuery("type")
|
|
colony, _ := c.GetQuery("colony")
|
|
soText, _ := c.GetQuery("so_text")
|
|
|
|
pInt, _ := strconv.ParseInt(p, 10, 64)
|
|
pageSizeInt, _ := strconv.ParseInt(pageSize, 10, 64)
|
|
|
|
pageStart := page.Start(pInt, pageSizeInt)
|
|
|
|
sql := `select id,type,project_name,agent,ip,country,region,city,create_time,info from hfish_info where 1=1`
|
|
sqlx := `select count(1) as sum from hfish_info where 1=1`
|
|
sqlStatus := 0
|
|
|
|
if typex != "all" {
|
|
sql = sql + ` and type=?`
|
|
sqlx = sqlx + ` and type=?`
|
|
sqlStatus = 1
|
|
}
|
|
|
|
if colony != "all" {
|
|
sql = sql + ` and agent=?`
|
|
sqlx = sqlx + ` and agent=?`
|
|
if sqlStatus == 1 {
|
|
sqlStatus = 3
|
|
} else {
|
|
sqlStatus = 2
|
|
}
|
|
}
|
|
|
|
if soText != "" {
|
|
sql = sql + ` and (project_name like ? or ip like ?)`
|
|
sqlx = sqlx + ` and type=?`
|
|
|
|
if sqlStatus == 1 {
|
|
sqlStatus = 4
|
|
} else if sqlStatus == 2 {
|
|
sqlStatus = 5
|
|
} else if sqlStatus == 3 {
|
|
sqlStatus = 6
|
|
} else {
|
|
sqlStatus = 7
|
|
}
|
|
}
|
|
|
|
sql = sql + ` ORDER BY id desc LIMIT ?,?;`
|
|
|
|
if sqlStatus == 0 {
|
|
result := dbUtil.Query(sql, pageStart, pageSizeInt)
|
|
resultx := dbUtil.Query(sqlx)
|
|
totalCount := resultx[0]["sum"].(int64)
|
|
pageCount := page.TotalPage(totalCount, pageSizeInt)
|
|
|
|
c.JSON(http.StatusOK, gin.H{
|
|
"data": result,
|
|
"pageCount": pageCount,
|
|
"totalCount": totalCount,
|
|
"page": p,
|
|
})
|
|
} else if sqlStatus == 1 {
|
|
result := dbUtil.Query(sql, typex, pageStart, pageSizeInt)
|
|
resultx := dbUtil.Query(sqlx, typex)
|
|
totalCount := resultx[0]["sum"].(int64)
|
|
pageCount := page.TotalPage(totalCount, pageSizeInt)
|
|
|
|
c.JSON(http.StatusOK, gin.H{
|
|
"data": result,
|
|
"pageCount": pageCount,
|
|
"totalCount": totalCount,
|
|
"page": p,
|
|
})
|
|
} else if sqlStatus == 2 {
|
|
result := dbUtil.Query(sql, colony, pageStart, pageSizeInt)
|
|
resultx := dbUtil.Query(sqlx, colony)
|
|
totalCount := resultx[0]["sum"].(int64)
|
|
pageCount := page.TotalPage(totalCount, pageSizeInt)
|
|
|
|
c.JSON(http.StatusOK, gin.H{
|
|
"data": result,
|
|
"pageCount": pageCount,
|
|
"totalCount": totalCount,
|
|
"page": p,
|
|
})
|
|
} else if sqlStatus == 3 {
|
|
result := dbUtil.Query(sql, typex, colony, pageStart, pageSizeInt)
|
|
resultx := dbUtil.Query(sqlx, typex, colony)
|
|
totalCount := resultx[0]["sum"].(int64)
|
|
pageCount := page.TotalPage(totalCount, pageSizeInt)
|
|
|
|
c.JSON(http.StatusOK, gin.H{
|
|
"data": result,
|
|
"pageCount": pageCount,
|
|
"totalCount": totalCount,
|
|
"page": p,
|
|
})
|
|
} else if sqlStatus == 4 {
|
|
result := dbUtil.Query(sql, typex, "%"+soText+"%", "%"+soText+"%", pageStart, pageSizeInt)
|
|
resultx := dbUtil.Query(sqlx, typex, "%"+soText+"%", "%"+soText+"%")
|
|
totalCount := resultx[0]["sum"].(int64)
|
|
pageCount := page.TotalPage(totalCount, pageSizeInt)
|
|
|
|
c.JSON(http.StatusOK, gin.H{
|
|
"data": result,
|
|
"pageCount": pageCount,
|
|
"totalCount": totalCount,
|
|
"page": p,
|
|
})
|
|
} else if sqlStatus == 5 {
|
|
result := dbUtil.Query(sql, colony, "%"+soText+"%", "%"+soText+"%", pageStart, pageSizeInt)
|
|
resultx := dbUtil.Query(sqlx, colony, "%"+soText+"%", "%"+soText+"%")
|
|
totalCount := resultx[0]["sum"].(int64)
|
|
pageCount := page.TotalPage(totalCount, pageSizeInt)
|
|
|
|
c.JSON(http.StatusOK, gin.H{
|
|
"data": result,
|
|
"pageCount": pageCount,
|
|
"totalCount": totalCount,
|
|
"page": p,
|
|
})
|
|
} else if sqlStatus == 6 {
|
|
result := dbUtil.Query(sql, typex, colony, "%"+soText+"%", "%"+soText+"%", pageStart, pageSizeInt)
|
|
resultx := dbUtil.Query(sqlx, typex, colony, "%"+soText+"%", "%"+soText+"%")
|
|
totalCount := resultx[0]["sum"].(int64)
|
|
pageCount := page.TotalPage(totalCount, pageSizeInt)
|
|
|
|
c.JSON(http.StatusOK, gin.H{
|
|
"data": result,
|
|
"pageCount": pageCount,
|
|
"totalCount": totalCount,
|
|
"page": p,
|
|
})
|
|
} else if sqlStatus == 7 {
|
|
result := dbUtil.Query(sql, "%"+soText+"%", "%"+soText+"%", pageStart, pageSizeInt)
|
|
resultx := dbUtil.Query(sqlx, "%"+soText+"%", "%"+soText+"%")
|
|
totalCount := resultx[0]["sum"].(int64)
|
|
pageCount := page.TotalPage(totalCount, pageSizeInt)
|
|
|
|
c.JSON(http.StatusOK, gin.H{
|
|
"data": result,
|
|
"pageCount": pageCount,
|
|
"totalCount": totalCount,
|
|
"page": p,
|
|
})
|
|
}
|
|
}
|
|
|
|
// 删除蜜罐
|
|
func PostFishDel(c *gin.Context) {
|
|
id := c.PostForm("id")
|
|
|
|
idx := strings.Split(id, ",")
|
|
|
|
// 暂时此种方式,待优化
|
|
for _, x := range idx {
|
|
sqlDel := `delete from hfish_info where id in (?);`
|
|
dbUtil.Delete(sqlDel, x)
|
|
}
|
|
|
|
c.JSON(http.StatusOK, error.ErrSuccessNull())
|
|
}
|
|
|
|
// 获取蜜罐信息
|
|
func GetFishInfo(c *gin.Context) {
|
|
id, _ := c.GetQuery("id")
|
|
sql := `select info from hfish_info where id=?;`
|
|
result := dbUtil.Query(sql, id)
|
|
c.JSON(http.StatusOK, error.ErrSuccess(result))
|
|
}
|
|
|
|
// 获取蜜罐分类信息,集群信息
|
|
func GetFishTypeInfo(c *gin.Context) {
|
|
sqlInfoType := `select type from hfish_info GROUP BY type;`
|
|
resultInfoType := dbUtil.Query(sqlInfoType)
|
|
|
|
sqlColonyName := `select agent_name from hfish_colony GROUP BY agent_name;`
|
|
resultColonyName := dbUtil.Query(sqlColonyName)
|
|
|
|
c.JSON(http.StatusOK, gin.H{
|
|
"resultInfoType": resultInfoType,
|
|
"resultColonyName": resultColonyName,
|
|
})
|
|
}
|