fix: WinRM try host.hostname first like Enter-PSSession (0.10.4)

This commit is contained in:
PTah
2026-06-20 00:13:02 +10:00
parent c8e3eef9d7
commit 279ea925a8
6 changed files with 56 additions and 13 deletions
+35 -8
View File
@@ -35,8 +35,28 @@ def resolve_windows_host_target(host: Host) -> str:
return targets[0]
def _netbios_name_variants(name: str | None) -> list[str]:
"""Короткое имя ПК (NetBIOS), как Enter-PSSession -ComputerName Andrisonova-PC."""
text = (name or "").strip()
if not text:
return []
short = text.split(".")[0].split("\\")[0].strip()
if not short:
return []
if short.casefold() == text.casefold():
return [short]
return [short, text]
def _looks_like_computer_name(value: str) -> bool:
text = value.strip()
if not text or " " in text:
return False
return len(text) <= 63
def iter_winrm_targets(host: Host) -> list[str]:
"""WinRM + NTLM: сначала имя машины (SPN), затем IPv4."""
"""WinRM + NTLM: сначала имя хоста (как Enter-PSSession -ComputerName), IP — последним."""
if not is_windows_host(host):
raise HostNotWindowsError("Host is not Windows")
@@ -45,17 +65,24 @@ def iter_winrm_targets(host: Host) -> list[str]:
def add(value: str | None) -> None:
text = (value or "").strip()
if not text or text in seen:
if not text or text.casefold() in seen:
return
seen.add(text)
seen.add(text.casefold())
ordered.append(text)
for variant in _netbios_name_variants(host.hostname):
add(variant)
inventory = host.inventory if isinstance(host.inventory, dict) else {}
computer_name = inventory.get("computer_name")
if isinstance(computer_name, str):
add(computer_name)
add(host.hostname)
add(host.display_name)
for variant in _netbios_name_variants(computer_name):
add(variant)
if host.display_name and _looks_like_computer_name(host.display_name):
for variant in _netbios_name_variants(host.display_name):
add(variant)
add(host.ipv4)
return ordered
@@ -104,8 +131,8 @@ def test_winrm_connection(
hint = ""
if "credentials were rejected" in detail.lower():
hint = (
" Проверьте логин (B26\\user), пароль и что учётка — admin на целевом ПК; "
"при подключении по IP NTLM часто отклоняет creds — используйте имя хоста."
" Проверьте логин (B26\\user), пароль и права admin на ПК; "
"подключайтесь по имени хоста (как Enter-PSSession -ComputerName), не по IP."
)
return WinRmTestResult(
ok=False,
+1 -1
View File
@@ -1,5 +1,5 @@
"""Единый источник версии SAC (API, health, логи, OpenAPI)."""
APP_NAME = "Security Alert Center"
APP_VERSION = "0.10.3"
APP_VERSION = "0.10.4"
APP_VERSION_LABEL = f"{APP_NAME} v.{APP_VERSION}"