diff --git a/internal/nodes/client_conn.go b/internal/nodes/client_conn.go index 33f2392..35f4881 100644 --- a/internal/nodes/client_conn.go +++ b/internal/nodes/client_conn.go @@ -135,7 +135,7 @@ func (this *ClientConn) checkSYNFlood() { var ip = this.RawIP() if len(ip) > 0 && !iplibrary.IsInWhiteList(ip) && (!synFloodConfig.IgnoreLocal || !utils.IsLocalIP(ip)) { - var timestamp = (utils.UnixTime()/60)*60 + 60 + var timestamp = utils.NextMinuteUnixTime() var result = ttlcache.SharedCache.IncreaseInt64("SYN_FLOOD:"+ip, 1, timestamp) var minAttempts = synFloodConfig.MinAttempts if minAttempts < 3 { diff --git a/internal/stats/traffic_stat_manager.go b/internal/stats/traffic_stat_manager.go index 6ac5746..bad410b 100644 --- a/internal/stats/traffic_stat_manager.go +++ b/internal/stats/traffic_stat_manager.go @@ -100,8 +100,7 @@ func (this *TrafficStatManager) Add(serverId int64, domain string, bytes int64, this.totalRequests++ - timestamp := utils.UnixTime() / 300 * 300 - + timestamp := utils.FloorUnixTime(300) key := strconv.FormatInt(timestamp, 10) + strconv.FormatInt(serverId, 10) this.locker.Lock() diff --git a/internal/utils/time.go b/internal/utils/time.go index 65450ed..ae11c7a 100644 --- a/internal/utils/time.go +++ b/internal/utils/time.go @@ -23,6 +23,21 @@ func UnixTime() int64 { return unixTime } +// FloorUnixTime 取整 +func FloorUnixTime(seconds int) int64 { + return UnixTime() / int64(seconds) * int64(seconds) +} + +// CeilUnixTime 取整并加1 +func CeilUnixTime(seconds int) int64 { + return UnixTime()/int64(seconds)*int64(seconds) + int64(seconds) +} + +// NextMinuteUnixTime 获取下一分钟开始的时间戳 +func NextMinuteUnixTime() int64 { + return CeilUnixTime(60) +} + // UnixTimeMilli 获取时间戳,精确到毫秒 func UnixTimeMilli() int64 { return unixTimeMilli diff --git a/internal/utils/time_test.go b/internal/utils/time_test.go index cf0da76..260b4f6 100644 --- a/internal/utils/time_test.go +++ b/internal/utils/time_test.go @@ -1,6 +1,7 @@ package utils import ( + timeutil "github.com/iwind/TeaGo/utils/time" "testing" "time" ) @@ -19,3 +20,11 @@ func TestGMTUnixTime(t *testing.T) { func TestGMTTime(t *testing.T) { t.Log(GMTTime(time.Now())) } + +func TestFloorUnixTime(t *testing.T) { + var timestamp = time.Now().Unix() + t.Log("floor 60:", timestamp, FloorUnixTime(60), timeutil.FormatTime("Y-m-d H:i:s", FloorUnixTime(60))) + t.Log("ceil 60:", timestamp, CeilUnixTime(60), timeutil.FormatTime("Y-m-d H:i:s", CeilUnixTime(60))) + t.Log("floor 300:", timestamp, FloorUnixTime(300), timeutil.FormatTime("Y-m-d H:i:s", FloorUnixTime(300))) + t.Log("next minute:", NextMinuteUnixTime()) +}