fix(utils): use getaddrinfo response to support dual-stack port checks (#21043)

This commit is contained in:
vin01 2022-09-02 01:28:02 +00:00 committed by GitHub
parent 2aa3bb6c00
commit 38782bb98a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -27,16 +27,19 @@ def is_port_open(host: str, port: int) -> bool:
Test if a given port in a host is open.
"""
# pylint: disable=invalid-name
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(PORT_TIMEOUT)
try:
s.connect((host, port))
s.shutdown(socket.SHUT_RDWR)
return True
except socket.error:
return False
finally:
s.close()
for res in socket.getaddrinfo(host, port, 0, socket.SOCK_STREAM):
af, _, _, _, sockaddr = res
s = socket.socket(af, socket.SOCK_STREAM)
try:
s.settimeout(PORT_TIMEOUT)
s.connect((sockaddr))
s.shutdown(socket.SHUT_RDWR)
return True
except socket.error as _:
continue
finally:
s.close()
return False
def is_hostname_valid(host: str) -> bool: