mirror of
https://github.com/Horizontal42/netsleuth.git
synced 2026-11-10 23:52:04 +03:00
fix: исправить валидацию IPv6 адресов (link-local, unique local)
This commit is contained in:
parent
d438e3aa30
commit
f99a06985e
1 changed files with 10 additions and 16 deletions
|
|
@ -52,29 +52,23 @@ def validate_target(value: str) -> str:
|
||||||
Raises:
|
Raises:
|
||||||
typer.BadParameter: Если адрес запрещён
|
typer.BadParameter: Если адрес запрещён
|
||||||
"""
|
"""
|
||||||
# Пропускаем hostnames (содержат буквы)
|
|
||||||
if any(c.isalpha() for c in value):
|
|
||||||
return value
|
|
||||||
|
|
||||||
# Проверка на запрещённые префиксы
|
|
||||||
value_lower = value.lower()
|
|
||||||
for prefix in FORBIDDEN_PREFIXES:
|
|
||||||
if value_lower.startswith(prefix.lower()):
|
|
||||||
raise typer.BadParameter(
|
|
||||||
f"Target '{value}' cannot be a private/reserved IP address. "
|
|
||||||
"Please use a public IP or hostname."
|
|
||||||
)
|
|
||||||
|
|
||||||
# Попытка распарсить как IP для дополнительной проверки
|
# Попытка распарсить как IP для дополнительной проверки
|
||||||
try:
|
try:
|
||||||
ip = ipaddress.ip_address(value)
|
ip = ipaddress.ip_address(value)
|
||||||
if ip.is_private or ip.is_reserved or ip.is_multicast:
|
if ip.is_private or ip.is_reserved or ip.is_multicast or ip.is_link_local:
|
||||||
raise typer.BadParameter(
|
raise typer.BadParameter(
|
||||||
f"Target '{value}' is a private/reserved/multicast address. "
|
f"Target '{value}' is a private/reserved/multicast/link-local address. "
|
||||||
"Please use a public IP address."
|
"Please use a public IP address."
|
||||||
)
|
)
|
||||||
|
return value
|
||||||
except ValueError:
|
except ValueError:
|
||||||
# Не IP-адрес (возможно hostname), это ок
|
# Не IP-адрес (hostname), проверяем что это не выглядит как private IP
|
||||||
|
pass
|
||||||
|
|
||||||
|
# Для hostnames - простая проверка что не начинается с цифр (не похоже на IP)
|
||||||
|
# Hostnames могут содержать буквы, цифры, дефисы и точки
|
||||||
|
if value[0].isdigit():
|
||||||
|
# Похоже на IP но не распарсился - возможно невалидный, но не блокируем
|
||||||
pass
|
pass
|
||||||
|
|
||||||
return value
|
return value
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue