You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中检测目标网站TLS协议支持并捕获异常输出状态

解决TLS协议支持检测的异常处理问题

我来帮你搞定这个异常处理的问题!咱们直接调整代码,添加针对性的捕获逻辑,就能清晰区分「协议支持」和「协议不支持」的场景,还能给出友好的提示信息。

修改后的完整代码

import socket
import ssl

def check_tls_protocol_support(host, port, tls_version):
    # 把TLS版本常量转成可读名称,让提示更友好
    tls_name_map = {
        ssl.PROTOCOL_TLSv1_1: "TLSv1.1",
        ssl.PROTOCOL_TLSv1_2: "TLSv1.2",
        ssl.PROTOCOL_TLSv1_3: "TLSv1.3",
    }
    protocol_name = tls_name_map.get(tls_version, "未知TLS版本")
    
    context = ssl.SSLContext(tls_version)
    try:
        # 用with自动管理socket资源,不用手动关闭
        with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
            ssl_sock = context.wrap_socket(s, server_hostname=host)
            ssl_sock.connect((host, port))
            print(f"✅ 目标网站支持{protocol_name}协议")
            # 可选:获取网站SSL证书信息,按需扩展
            # cert_info = ssl_sock.getpeercert()
    except ssl.SSLError as e:
        # 精准判断协议不兼容的错误关键词
        error_msg = str(e)
        if "wrong version number" in error_msg or "protocol version" in error_msg:
            print(f"❌ 目标网站不支持{protocol_name}协议")
        else:
            print(f"❌ SSL连接出错: {error_msg}")
    except socket.error as e:
        print(f"❌ 网络连接失败: {str(e)}")
    except Exception as e:
        print(f"❌ 未知错误: {str(e)}")

# 测试示例:检测www.verisign.com对TLSv1.1的支持情况
check_tls_protocol_support('www.verisign.com', 443, ssl.PROTOCOL_TLSv1_1)

关键逻辑说明

  • 分层异常捕获:
    • 优先抓ssl.SSLError:这是TLS协议相关错误的核心异常类,通过错误信息里的关键词(比如"wrong version number")精准识别「协议不支持」的场景。
    • 然后抓socket.error:处理网络层面的问题,比如目标端口不通、域名解析失败等。
    • 最后用通用Exception兜底,避免遗漏其他未知错误。
  • 友好的版本名称映射:把Python的TLS版本常量转换成人类可读的名称,让输出提示更直观。
  • 自动资源管理:用with上下文管理器处理socket,不需要手动关闭连接,代码更简洁安全。

测试效果

  • 协议支持时:输出 ✅ 目标网站支持TLSv1.1协议
  • 协议不支持时:输出 ❌ 目标网站不支持TLSv1.1协议
  • 其他错误(比如网络不通):输出对应的具体错误提示

内容的提问来源于stack exchange,提问作者fazzerking

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:25:46