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

Python 2.7基于标准库实现网站SSL/TLS版本检测的技术问询

检测网站SSL/TLS版本的Python 2.7实现(仅依赖标准库)

我帮你完善并整理了这个Python 2.7程序,它完全使用标准库就能检测目标网站支持的SSL/TLS版本。下面是完整可运行的代码:

#encoding=utf-8
import ssl
import socket
import traceback
import logging
import sys
import json

# 配置基础日志
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)

class AnalyseSSL:
    # 指定兼容旧SSL版本的加密套件(部分老服务器需要)
    cipher_list = "RC4-SHA:AES128-SHA".split(":")
    # 定义要检测的SSL/TLS版本及对应的禁用参数
    list_version_ssl_tls = [
        ("SSLv2", ssl.OP_ALL | ssl.OP_NO_SSLv3 | ssl.OP_NO_TLSv1 | ssl.OP_NO_TLSv1_1 | ssl.OP_NO_TLSv1_2),
        ("SSLv3", ssl.OP_ALL | ssl.OP_NO_SSLv2 | ssl.OP_NO_TLSv1 | ssl.OP_NO_TLSv1_1 | ssl.OP_NO_TLSv1_2),
        ("TLSv1", ssl.OP_ALL | ssl.OP_NO_SSLv2 | ssl.OP_NO_SSLv3 | ssl.OP_NO_TLSv1_1 | ssl.OP_NO_TLSv1_2),
        ("TLSv1.1", ssl.OP_ALL | ssl.OP_NO_SSLv2 | ssl.OP_NO_SSLv3 | ssl.OP_NO_TLSv1 | ssl.OP_NO_TLSv1_2),
        ("TLSv1.2", ssl.OP_ALL | ssl.OP_NO_SSLv2 | ssl.OP_NO_SSLv3 | ssl.OP_NO_TLSv1 | ssl.OP_NO_TLSv1_1)
    ]

    @classmethod
    def check_ssl_version(cls, hostname, port=443, timeout=10):
        supported_versions = []
        for version_name, ssl_opts in cls.list_version_ssl_tls:
            try:
                # 创建socket并设置超时
                sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
                sock.settimeout(timeout)
                # 配置SSL上下文,仅启用当前要检测的版本
                context = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
                context.options = ssl_opts
                context.set_ciphers(':'.join(cls.cipher_list))
                # 建立SSL连接
                ssl_sock = context.wrap_socket(sock, server_hostname=hostname)
                ssl_sock.connect((hostname, port))
                # 连接成功则标记该版本为支持
                supported_versions.append(version_name)
                logger.info(f"✅ {hostname} supports {version_name}")
                ssl_sock.close()
            except Exception as e:
                logger.debug(f"❌ {hostname} does not support {version_name}: {str(e)}")
                # 如需调试可取消注释以下行,查看详细错误栈
                # traceback.print_exc()
                continue
        return supported_versions

if __name__ == "__main__":
    if len(sys.argv) < 2:
        print("Usage: python ssl_checker.py <hostname> [port]")
        sys.exit(1)
    hostname = sys.argv[1]
    port = int(sys.argv[2]) if len(sys.argv) > 2 else 443
    result = AnalyseSSL.check_ssl_version(hostname, port)
    print(json.dumps({"hostname": hostname, "supported_ssl_tls_versions": result}, indent=2))

关键细节说明:

  • 版本精准检测:每个版本通过ssl.OP_NO_*参数禁用其他所有SSL/TLS版本,确保每次检测只验证目标版本的兼容性,避免干扰。
  • 兼容旧服务器:指定RC4-SHA等老旧加密套件,适配不支持现代加密算法的服务器。
  • 异常容错:捕获握手失败、超时等所有连接异常,合理判定版本不被支持。
  • 命令行易用性:直接通过命令行传入目标主机和端口(默认443),输出结构化的JSON结果。

使用示例:

python ssl_checker.py example.com

输出示例:

{
  "hostname": "example.com",
  "supported_ssl_tls_versions": [
    "TLSv1",
    "TLSv1.1",
    "TLSv1.2"
  ]
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:47:23