INNER CODE UNIT · Python
tcp_status
ermaozi/get_subscribe · check_nodes.py:57
def tcp_status(address):
# ponytail: 只测 TCP 握手;需要验证认证和代理出口时再引入代理内核。
host, port = address
try:
resolved = socket.getaddrinfo(host, port, type=socket.SOCK_STREAM)
except OSError:
return 'unreachable'
public = []
for family, socktype, proto, _, sockaddr in resolved:
# 来源不可信,不探测宿主机内网、回环或云实例元数据地址。
if ipaddress.ip_address(sockaddr[0]).is_global:
public.append((family, socktype, proto, sockaddr))
if not public:
return 'untested'
deadline = time.monotonic() + TIMEOUT
for family, socktype, proto, sockaddr in public:
remaining = deadline - time.monotonic()
if remaining <= 0: