refine macOS service selection
This commit is contained in:
@@ -67,13 +67,31 @@ def _mac_network_services() -> list[str]:
|
||||
)
|
||||
except Exception:
|
||||
return []
|
||||
services: list[str] = []
|
||||
listed: list[str] = []
|
||||
for line in (r.stdout or "").splitlines():
|
||||
name = line.strip()
|
||||
if not name or name.startswith("An asterisk"):
|
||||
raw = line.strip()
|
||||
if not raw or raw.startswith("An asterisk"):
|
||||
continue
|
||||
services.append(name.lstrip("*").strip())
|
||||
return services
|
||||
# networksetup marks disabled services with a leading '*'.
|
||||
if raw.startswith("*"):
|
||||
continue
|
||||
listed.append(raw)
|
||||
|
||||
enabled: list[str] = []
|
||||
for service in listed:
|
||||
try:
|
||||
chk = subprocess.run(
|
||||
["networksetup", "-getnetworkserviceenabled", service],
|
||||
capture_output=True,
|
||||
text=True,
|
||||
timeout=8,
|
||||
)
|
||||
out = (chk.stdout or "").strip().lower()
|
||||
if "enabled" in out and "disabled" not in out:
|
||||
enabled.append(service)
|
||||
except Exception:
|
||||
continue
|
||||
return enabled or listed
|
||||
|
||||
|
||||
def _mac_run_networksetup(args: list[str]) -> bool:
|
||||
@@ -156,6 +174,30 @@ def _mac_system_proxy_set() -> bool:
|
||||
return False
|
||||
|
||||
|
||||
def _mac_service_has_live_ip(service: str) -> bool:
|
||||
try:
|
||||
r = subprocess.run(
|
||||
["networksetup", "-getinfo", service],
|
||||
capture_output=True,
|
||||
text=True,
|
||||
timeout=8,
|
||||
)
|
||||
info = (r.stdout or "").splitlines()
|
||||
except Exception:
|
||||
return False
|
||||
for line in info:
|
||||
s = line.strip()
|
||||
if s.startswith("IP address:"):
|
||||
ip = s.split(":", 1)[1].strip().lower()
|
||||
if ip and ip != "none" and ip != "0.0.0.0":
|
||||
return True
|
||||
if s.startswith("IPv6:"):
|
||||
v = s.split(":", 1)[1].strip().lower()
|
||||
if v not in ("off", "none"):
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
def _is_admin() -> bool:
|
||||
try:
|
||||
return ctypes.windll.shell32.IsUserAnAdmin() != 0 # type: ignore[attr-defined]
|
||||
@@ -461,7 +503,10 @@ def _read_winhttp_proxy() -> str:
|
||||
def diagnose_system_proxy() -> list[str]:
|
||||
if sys.platform == "darwin":
|
||||
out = []
|
||||
for service in _mac_network_services()[:8]:
|
||||
services = _mac_network_services()
|
||||
active = [s for s in services if _mac_service_has_live_ip(s)]
|
||||
inspect = active[:8] if active else services[:8]
|
||||
for service in inspect:
|
||||
try:
|
||||
r = subprocess.run(
|
||||
["networksetup", "-getwebproxy", service],
|
||||
|
||||
Reference in New Issue
Block a user