From 71693042127b19265b8d85bb816b7ac6057ffda8 Mon Sep 17 00:00:00 2001 From: Falknat Date: Fri, 16 Jan 2026 16:13:18 +0700 Subject: [PATCH] =?UTF-8?q?vAccess=20-=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=81=D0=B5=D1=82=D0=B5=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Теперь можно добавлять сети /** в правила блокировки по IP --- Backend/WebServer/vAccess.go | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/Backend/WebServer/vAccess.go b/Backend/WebServer/vAccess.go index f7a8cd4..f27d414 100644 --- a/Backend/WebServer/vAccess.go +++ b/Backend/WebServer/vAccess.go @@ -2,6 +2,7 @@ package webserver import ( "bufio" + "net" "net/http" "os" "path/filepath" @@ -281,16 +282,32 @@ func getClientIP(r *http.Request) string { return ip } -// Проверка соответствия IP адреса правилу +// Проверка соответствия IP адреса правилу (поддержка CIDR подсетей) func matchIPAddress(ruleIPs []string, clientIP string) bool { if len(ruleIPs) == 0 { return true // Если IP не указаны, то проверка пройдена } + // Парсим IP клиента + parsedClientIP := net.ParseIP(clientIP) + for _, ruleIP := range ruleIPs { ruleIP = strings.TrimSpace(ruleIP) - if ruleIP == clientIP { - return true + + // Проверяем, является ли правило CIDR (содержит /) + if strings.Contains(ruleIP, "/") { + _, subnet, err := net.ParseCIDR(ruleIP) + if err != nil { + continue // Некорректный CIDR — пропускаем + } + if parsedClientIP != nil && subnet.Contains(parsedClientIP) { + return true + } + } else { + // Точное совпадение IP + if ruleIP == clientIP { + return true + } } }