mirror of
https://gitee.com/samwaf/SamWaf.git
synced 2026-10-31 10:11:42 +08:00
109 lines
2.1 KiB
Go
109 lines
2.1 KiB
Go
package utils
|
|
|
|
import (
|
|
"SamWaf/global"
|
|
"SamWaf/model"
|
|
"SamWaf/utils/zlog"
|
|
"fmt"
|
|
"github.com/lionsoul2014/ip2region/binding/golang/xdb"
|
|
"net"
|
|
"strconv"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
func GetServerByHosts(hosts model.Hosts) string {
|
|
if hosts.Ssl == 1 {
|
|
return "https"
|
|
} else {
|
|
return "http"
|
|
}
|
|
}
|
|
|
|
/*
|
|
*
|
|
|
|
计算两个自然天数的间隔数
|
|
*/
|
|
func DiffNatureDays(t1, t2 int64) int {
|
|
var SecondsOfDay int64 = 86400
|
|
if t1 == t2 {
|
|
return -1
|
|
}
|
|
if t1 > t2 {
|
|
t1, t2 = t2, t1
|
|
}
|
|
|
|
diffDays := 0
|
|
secDiff := t2 - t1
|
|
if secDiff > SecondsOfDay {
|
|
tmpDays := int(secDiff / SecondsOfDay)
|
|
t1 += int64(tmpDays) * SecondsOfDay
|
|
diffDays += tmpDays
|
|
}
|
|
|
|
st := time.Unix(t1, 0)
|
|
et := time.Unix(t2, 0)
|
|
dateFormatTpl := "20060102"
|
|
if st.Format(dateFormatTpl) != et.Format(dateFormatTpl) {
|
|
diffDays += 1
|
|
}
|
|
|
|
return diffDays
|
|
}
|
|
|
|
/**字符串->时间对象*/
|
|
func Str2Time(formatTimeStr string) time.Time {
|
|
timeLayout := "20060102"
|
|
loc, _ := time.LoadLocation("Local")
|
|
theTime, _ := time.ParseInLocation(timeLayout, formatTimeStr, loc) //使用模板在对应时区转化为time.time类型
|
|
|
|
return theTime
|
|
}
|
|
|
|
/*
|
|
*
|
|
时间转int天
|
|
*/
|
|
func TimeToDayInt(t time.Time) int {
|
|
day, _ := strconv.Atoi(t.Format("20060102"))
|
|
return day
|
|
}
|
|
func GetPublicIP() string {
|
|
conn, err := net.Dial("udp", "8.8.8.8:80")
|
|
if err != nil {
|
|
return "localhost"
|
|
// log.Fatal(err)
|
|
}
|
|
defer conn.Close()
|
|
localAddr := conn.LocalAddr().String()
|
|
idx := strings.LastIndex(localAddr, ":")
|
|
return localAddr[0:idx]
|
|
}
|
|
|
|
func GetCountry(ip string) []string {
|
|
// 2、用全局的 cBuff 创建完全基于内存的查询对象。
|
|
searcher, err := xdb.NewWithBuffer(global.GCACHE_IP_CBUFF)
|
|
if err != nil {
|
|
fmt.Printf("failed to create searcher with content: %s\n", err)
|
|
|
|
}
|
|
|
|
defer searcher.Close()
|
|
|
|
// do the search
|
|
var tStart = time.Now()
|
|
|
|
// 备注:并发使用,每个 goroutine 需要创建一个独立的 searcher 对象。
|
|
region, err := searcher.SearchByStr(ip)
|
|
if err != nil {
|
|
fmt.Printf("failed to SearchIP(%s): %s\n", ip, err)
|
|
return []string{"无", "无"}
|
|
}
|
|
|
|
zlog.Debug("{region: %s, took: %s}\n", region, time.Since(tStart))
|
|
regions := strings.Split(region, "|")
|
|
|
|
return regions
|
|
}
|