要创建一个VPN连接失败检测工具,可以使用Python编写一个命令行工具来监测VPN服务器的连接状态,以下是一个示例工具的思路和代码:

工具名称:vpn_health_check.py

工具目标:

  • 监测多个VPN服务器的连接状态。
  • 检查TCP和UDP端口是否开放。
  • 检查服务器的SSL/TLS证书是否有效。
  • 定期执行检测并提供报告。

工具功能:

  1. 输入参数

    • 您的VPN服务器列表,包含服务器地址、端口、协议和证书文件路径。
    • 定时检测的时间间隔(默认30分钟)。
  2. 检测项

    • TCP连接测试。
    • UDP连接测试。
    • SSL/TLS证书有效性测试。
    • 服务器响应时间监控。
  3. 输出

    • 实时状态显示(绿色正常,红色异常)。
    • 每次检测结果的报告文件。
    • 异常日志文件。

工具代码:

import argparse
import time
import socket
import ssl
import requests
from datetime import datetime
import logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)
def is_port_open(host, port, protocol):
    try:
        if protocol == 'tcp':
            s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            s.connect((host, port))
            return True
        elif protocol == 'udp':
            s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
            s.sendto(b'', (host, port))
            return True
    except socket.error:
        return False
    except:
        return False
    finally:
        if 's' in locals():
            s.close()
        return False
def check_ssl_certificate(host, port, cert_path):
    try:
        # 创建 SSL 上下文
        context = ssl.create_default_context()
        # 连接到服务器
        conn = context.connect(host, port)
        # 检查证书
        certificate = conn.getpeercert()
        # 保存证书
        with open(cert_path, 'wb') as f:
            f.write(certificate)
        return True
    except Exception as e:
        logger.error(f"SSL检查失败:{str(e)}")
        return False
    finally:
        if 'conn' in locals():
            conn.close()
def main():
    # 解析命令行参数
    parser = argparse.ArgumentParser(description='VPN连接健康检查工具')
    parser.add_argument('--servers', type=str, help='服务器配置文件路径')
    parser.add_argument('--interval', type=int, default=30, help='检测间隔分钟')
    args = parser.parse_args()
    # 加载服务器配置
    try:
        with open(args.servers, 'r') as f:
            servers = json.load(f)
    except Exception as e:
        logger.error(f"读取服务器配置失败:{str(e)}")
        return
    # 创建定时任务
    while True:
        logger.info('开始检测')
        for server in servers:
            host = server['host']
            port = int(server['port'])
            protocol = server['protocol']
            cert_path = server['cert_path']
            # 检查端口
            if not is_port_open(host, port, protocol):
                logger.error(f"服务器 {host}:{port} 端口 {protocol} 检查失败")
                continue
            # 检查SSL证书
            if not check_ssl_certificate(host, port, cert_path):
                logger.error(f"服务器 {host}:{port} SSL证书检查失败")
                continue
            logger.info(f"服务器 {host}:{port} 连接正常")
        # 保存检测结果
        current_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
        logger.info(f"检测结果:{current_time}")
        with open('vpn_health_report.log', 'a') as f:
            f.write(f"检测时间:{current_time}\n")
            for server in servers:
                host = server['host']
                port = int(server['port'])
                status = '正常'
                if not is_port_open(host, port, server['protocol']):
                    status = '端口检查失败'
                if not check_ssl_certificate(host, port, server['cert_path']):
                    status = '证书检查失败'
                f.write(f"服务器:{host}:{port} - {status}\n")
        # 等待下一次检测
        time.sleep(args.interval * 60)
if __name__ == '__main__':
    main()

使用说明:

  1. 安装依赖

    • 使用 pip install requests 安装必要的库。
  2. 配置文件

    • 创建一个 servers.json 文件,格式如下:
      [
          {
              "host": "server1.example.com",
              "port": 1194,
              "protocol": "tcp",
              "cert_path": "server1.crt"
          },
          {
              "host": "server2.example.com",
              "port": 1195,
              "protocol": "udp",
              "cert_path": "server2.crt"
          }
      ]
  3. 运行工具

    • 在终端中运行:
      python vpn_health_check.py --servers servers.json --interval 60
    • 参数说明:
      • --servers:服务器配置文件路径。
      • --interval:检测间隔时间(分钟)。
  4. 日志输出

    • 工具会生成 vpn_health_report.log 文件,记录每次检测的结果。

功能扩展:

  • 支持更多协议:如 IKEv2 等。
  • 添加健康阈值:当连续多次检测失败时触发警报。
  • 集成告警系统:通过邮件或钉钉发送异常通知。

这个工具可以根据实际需求进行扩展和定制,帮助您自动化监控VPN服务器的健康状态。

配置日志

扫码添加XVPN网络加速器官网微信

扫码添加XVPN网络加速器官网微信

400-725-6318
扫码添加XVPN网络加速器官网微信

扫码添加XVPN网络加速器官网微信

网站地图