From 75fc3f3ce7405fb30cdbeb82ed12604249b21921 Mon Sep 17 00:00:00 2001 From: GoEdgeLab Date: Fri, 3 May 2024 16:58:38 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=BF=E9=97=AE=E6=97=A5=E5=BF=97=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0IPv6=E8=8C=83=E5=9B=B4=E6=90=9C=E7=B4=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/db/models/http_access_log_dao.go | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/internal/db/models/http_access_log_dao.go b/internal/db/models/http_access_log_dao.go index bf198262..bd9a068b 100644 --- a/internal/db/models/http_access_log_dao.go +++ b/internal/db/models/http_access_log_dao.go @@ -520,14 +520,27 @@ func (this *HTTPAccessLogDAO) listAccessLogs(tx *dbs.Tx, // keyword if len(ip) > 0 { - // TODO 支持IPv6范围 if tableQuery.hasRemoteAddrField { // IP格式 if strings.Contains(ip, ",") || strings.Contains(ip, "-") { - rangeConfig, err := shared.ParseIPRange(ip) - if err == nil { + rangeConfig, parseErr := shared.ParseIPRange(ip) + if parseErr == nil { if len(rangeConfig.IPFrom) > 0 && len(rangeConfig.IPTo) > 0 { - query.Between("INET_ATON(remoteAddr)", iputils.ToLong(rangeConfig.IPFrom), iputils.ToLong(rangeConfig.IPTo)) + if iputils.IsIPv6(rangeConfig.IPFrom) || iputils.IsIPv6(rangeConfig.IPTo) { + var ipFromHex = iputils.ToHex(rangeConfig.IPFrom) + var ipToHex = iputils.ToHex(rangeConfig.IPTo) + if ipFromHex > ipToHex { + ipFromHex, ipToHex = ipToHex, ipFromHex + } + query.Between("HEX(INET6_ATON(remoteAddr))", ipFromHex, ipToHex) + } else { + var ipFromLong = iputils.ToLong(rangeConfig.IPFrom) + var ipToLong = iputils.ToLong(rangeConfig.IPTo) + if ipFromLong > ipToLong { + ipFromLong, ipToLong = ipToLong, ipFromLong + } + query.Between("INET_ATON(remoteAddr)", ipFromLong, ipToLong) + } } } } else {