vAccess - Добавление сетей

Теперь можно добавлять сети /** в правила блокировки по IP
This commit is contained in:
2026-01-16 16:13:18 +07:00
parent e1cb580899
commit 7169304212

View File

@@ -2,6 +2,7 @@ package webserver
import ( import (
"bufio" "bufio"
"net"
"net/http" "net/http"
"os" "os"
"path/filepath" "path/filepath"
@@ -281,16 +282,32 @@ func getClientIP(r *http.Request) string {
return ip return ip
} }
// Проверка соответствия IP адреса правилу // Проверка соответствия IP адреса правилу (поддержка CIDR подсетей)
func matchIPAddress(ruleIPs []string, clientIP string) bool { func matchIPAddress(ruleIPs []string, clientIP string) bool {
if len(ruleIPs) == 0 { if len(ruleIPs) == 0 {
return true // Если IP не указаны, то проверка пройдена return true // Если IP не указаны, то проверка пройдена
} }
// Парсим IP клиента
parsedClientIP := net.ParseIP(clientIP)
for _, ruleIP := range ruleIPs { for _, ruleIP := range ruleIPs {
ruleIP = strings.TrimSpace(ruleIP) 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
}
} }
} }