fix: parse both parts[3] and parts[4] in _get_listening_ports() for ss output
Agent-Logs-Url: https://github.com/naturallaw777/staging_alpha/sessions/380a4877-aaea-47ea-8998-4c60ff6d49d2 Co-authored-by: naturallaw777 <99053422+naturallaw777@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
2e6d88daec
commit
adad79c7e8
@@ -760,17 +760,21 @@ def _get_listening_ports() -> dict[str, set[int]]:
|
||||
capture_output=True, text=True, timeout=10,
|
||||
)
|
||||
for line in proc.stdout.splitlines():
|
||||
# Column 4 is the local address:port (e.g. "0.0.0.0:443" or "[::]:443")
|
||||
# The local address:port column varies by ss output format:
|
||||
# - "0.0.0.0:PORT" style lines have extra spacing that puts the
|
||||
# local address at index 4 (zero-based).
|
||||
# - "*:PORT" style lines (dual-stack/wildcard, used by Caddy)
|
||||
# have the local address at index 3, with the peer at index 4.
|
||||
# Try both columns so neither format is silently skipped.
|
||||
parts = line.split()
|
||||
if len(parts) < 5:
|
||||
continue
|
||||
addr = parts[4]
|
||||
# strip IPv6 brackets and extract port after last ":"
|
||||
port_str = addr.rsplit(":", 1)[-1]
|
||||
try:
|
||||
result[proto].add(int(port_str))
|
||||
except ValueError:
|
||||
pass
|
||||
for addr in (parts[3], parts[4]):
|
||||
port_str = addr.rsplit(":", 1)[-1]
|
||||
try:
|
||||
result[proto].add(int(port_str))
|
||||
except ValueError:
|
||||
pass
|
||||
except Exception:
|
||||
pass
|
||||
return result
|
||||
|
||||
Reference in New Issue
Block a user