如何在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
相关产品推荐
相关产品推荐

