# API Latency & Network Diagnostics Tool
# Provided by DevNotes (https://blog.bt116.com)
import time
import socket
import ssl

ENDPOINTS = [
    ("OpenAI API", "api.openai.com", 443),
    ("Anthropic API", "api.anthropic.com", 443),
    ("Cloudflare DNS", "1.1.1.1", 443),
    ("Google Public DNS", "8.8.8.8", 443),
]

def test_endpoint(name, host, port):
    print(f"\n[*] 正在测试: {name} ({host}:{port})...")
    t0 = time.time()
    try:
        ip = socket.gethostbyname(host)
        dns_time = (time.time() - t0) * 1000
        print(f"  [√] DNS 解析成功: {ip} (耗时: {dns_time:.1f}ms)")
    except Exception as e:
        print(f"  [x] DNS 解析失败: {e}")
        return

    t1 = time.time()
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.settimeout(5.0)
    try:
        sock.connect((ip, port))
        tcp_time = (time.time() - t1) * 1000
        print(f"  [√] TCP 握手完成 (耗时: {tcp_time:.1f}ms)")
    except Exception as e:
        print(f"  [x] TCP 连接超时/失败: {e}")
        sock.close()
        return

    t2 = time.time()
    ctx = ssl.create_default_context()
    try:
        ssock = ctx.wrap_socket(sock, server_hostname=host)
        tls_time = (time.time() - t2) * 1000
        print(f"  [√] TLS 握手成功 (耗时: {tls_time:.1f}ms, 协议: {ssock.version()})")
        ssock.close()
    except Exception as e:
        print(f"  [x] TLS 握手失败: {e}")
        sock.close()

if __name__ == "__main__":
    print("=== 大模型跨国 API 连通性快速诊断 (DevNotes) ===")
    for name, host, port in ENDPOINTS:
        test_endpoint(name, host, port)
    print("\n[诊断完成] 技术交流群: 545064986")