vAccess - Добавление сетей
Теперь можно добавлять сети /** в правила блокировки по IP
This commit is contained in:
@@ -2,6 +2,7 @@ package webserver
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"net"
|
||||
"net/http"
|
||||
"os"
|
||||
"path/filepath"
|
||||
@@ -281,18 +282,34 @@ 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)
|
||||
|
||||
// Проверяем, является ли правило 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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user