vAccess - Добавление сетей
Теперь можно добавлять сети /** в правила блокировки по IP
This commit is contained in:
@@ -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
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user