2026年Python网络安全实战指南:10个实用脚本教你提升系统安全防护能力

2026年Python网络安全实战指南:10个实用脚本教你提升系统安全防护能力

2026年Python网络安全实战指南:10个实用脚本教你提升系统安全防护能力

在数字化转型加速的2026年,网络安全已经成为企业和个人都无法忽视的核心议题。Python凭借其简洁的语法、丰富的第三方库和强大的生态系统,已经成为网络安全工程师最常用的编程语言之一。本文将为你提供10个可直接运行的Python网络安全实战脚本,覆盖端口扫描、弱密码检测、漏洞扫描等常见安全场景,帮助你快速提升系统安全防护能力。

一、新手入门指南

1.1 网络安全基础概念

在开始编写脚本之前,你需要了解几个核心的网络安全概念:

  • **端口扫描**:通过检测目标主机的开放端口,识别潜在的服务漏洞
  • **弱密码检测**:验证系统账号是否使用容易被破解的简单密码
  • **渗透测试**:通过模拟黑客攻击的方式,发现系统存在的安全隐患
  • **入侵检测**:实时监控系统流量,识别并响应异常访问行为
  • **加密解密**:通过密码学算法保障数据在存储和传输过程中的安全性
  • 1.2 Python安全库介绍

    Python生态系统中有着丰富的安全相关库,以下是本文会用到的核心库:

  • `socket`:Python标准库,用于网络通信和端口扫描
  • `paramiko`:SSH协议实现,用于远程连接和弱密码检测
  • `requests`:HTTP请求库,用于Web漏洞扫描
  • `re`:正则表达式库,用于日志分析和模式匹配
  • `cryptography`:现代加密库,用于数据加密解密
  • `python-nmap`:Nmap扫描工具的Python封装
  • `pywin32`/`python-iptables`:系统级操作库,用于防火墙配置
  • `scapy`:网络数据包处理库,用于入侵检测
  • `imaplib`/`email`:邮件协议库,用于钓鱼邮件检测
  • `openvpn-api`:VPN管理库,用于VPN连接管理
  • 你可以通过以下命令安装这些依赖:

    bash
    pip install paramiko requests cryptography python-nmap scapy python-iptables openvpn-api
    

    二、10个网络安全实战脚本

    2.1 端口扫描脚本

    功能:快速扫描目标主机的开放端口,识别运行的服务。

    python
    import socket
    import threading
    from queue import Queue
    
    # 配置参数
    target = "127.0.0.1"  # 目标IP
    port_range = (1, 1024)  # 扫描端口范围
    thread_count = 100  # 线程数
    
    queue = Queue()
    open_ports = []
    
    def port_scanner(port):
        try:
            sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            sock.settimeout(1)
            result = sock.connect_ex((target, port))
            if result == 0:
                open_ports.append(port)
                # 尝试获取服务名称
                try:
                    service = socket.getservbyport(port)
                    print(f"[+] 端口 {port} 开放,服务:{service}")
                except:
                    print(f"[+] 端口 {port} 开放,服务:未知")
            sock.close()
        except Exception as e:
            pass
    
    def threader():
        while True:
            worker = queue.get()
            port_scanner(worker)
            queue.task_done()
    
    # 启动线程
    for _ in range(thread_count):
        t = threading.Thread(target=threader)
        t.daemon = True
        t.start()
    
    # 添加任务到队列
    for port in range(port_range[0], port_range[1]+1):
        queue.put(port)
    
    queue.join()
    print(f"\n扫描完成,共发现 {len(open_ports)} 个开放端口")
    

    使用说明

    1. 修改`target`为你要扫描的目标IP

    2. 调整`port_range`设置扫描的端口范围

    3. 运行脚本后会自动列出所有开放端口和对应的服务

    4. 注意:请仅对自己拥有所有权的系统进行扫描,避免违反法律法规

    2.2 弱密码检测脚本

    功能:检测SSH服务是否使用常见弱密码。

    python
    import paramiko
    from itertools import product
    
    # 配置参数
    target_ip = "192.168.1.100"
    ssh_port = 22
    usernames = ["admin", "root", "user"]
    # 常见弱密码列表,实际使用时可以加载更大的字典文件
    passwords = ["123456", "password", "admin", "root", "123123", "qwerty"]
    
    def ssh_bruteforce(username, password):
        ssh = paramiko.SSHClient()
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        try:
            ssh.connect(target_ip, port=ssh_port, username=username, password=password, timeout=3)
            print(f"[+] 发现弱密码!用户名:{username},密码:{password}")
            ssh.close()
            return True
        except paramiko.AuthenticationException:
            return False
        except Exception as e:
            print(f"[-] 连接错误:{e}")
            return False
    
    if __name__ == "__main__":
        print(f"[*] 开始对 {target_ip} 进行SSH弱密码检测...")
        for username in usernames:
            for password in passwords:
                print(f"[*] 尝试:{username}/{password}")
                if ssh_bruteforce(username, password):
                    # 找到密码后可以选择继续或停止
                    pass
        print("[*] 检测完成")
    

    使用说明

    1. 修改`target_ip`为目标服务器IP

    2. 调整`usernames`和`passwords`列表,或加载外部字典文件

    3. 该脚本仅用于检测自己系统的弱密码,禁止用于未授权的系统

    4. 建议配合企业密码策略使用,定期检测弱密码风险

    2.3 简单漏洞扫描脚本

    功能:检测常见Web漏洞,如SQL注入、XSS等。

    python
    import requests
    import re
    
    # 配置参数
    target_url = "http://example.com"
    vulnerabilities = {
        "sql_injection": ["'", "' OR '1'='1", "' OR 1=1--"],
        "xss": ["", ""]
    }
    
    def check_sql_injection(url):
        print("[*] 检测SQL注入漏洞...")
        for payload in vulnerabilities["sql_injection"]:
            test_url = f"{url}?id={payload}"
            try:
                response = requests.get(test_url, timeout=5)
                # 检测SQL错误特征
                if re.search(r"SQL syntax|mysql_fetch|You have an error in your SQL syntax", response.text):
                    print(f"[+] 发现SQL注入漏洞:{test_url}")
                    return True
            except Exception as e:
                print(f"[-] 请求错误:{e}")
        return False
    
    def check_xss(url):
        print("[*] 检测XSS漏洞...")
        for payload in vulnerabilities["xss"]:
            test_url = f"{url}?q={payload}"
            try:
                response = requests.get(test_url, timeout=5)
                if payload in response.text:
                    print(f"[+] 发现XSS漏洞:{test_url}")
                    return True
            except Exception as e:
                print(f"[-] 请求错误:{e}")
        return False
    
    if __name__ == "__main__":
        print(f"[*] 开始对 {target_url} 进行漏洞扫描...")
        check_sql_injection(target_url)
        check_xss(target_url)
        print("[*] 扫描完成")
    

    使用说明

    1. 修改`target_url`为你要检测的网站URL

    2. 可以扩展`vulnerabilities`字典添加更多检测payload

    3. 该脚本仅用于安全检测,禁止对未授权的网站进行扫描

    4. 建议结合专业的漏洞扫描工具使用,提高检测覆盖率

    2.4 日志分析脚本

    功能:分析Nginx访问日志,识别异常访问行为。

    python
    import re
    from collections import defaultdict
    
    # 配置参数
    log_path = "/var/log/nginx/access.log"
    # 异常状态码
    error_codes = ["404", "403", "500", "502"]
    # 敏感路径
    sensitive_paths = ["/admin", "/login", "/phpmyadmin", "/wp-admin"]
    
    def analyze_nginx_log():
        ip_requests = defaultdict(int)
        error_requests = defaultdict(int)
        path_requests = defaultdict(int)
        
        # Nginx日志正则表达式
        log_pattern = r'(\d+\.\d+\.\d+\.\d+) - - \[.*?\] "(.*?)" (\d+) \d+ "(.*?)" "(.*?)"'
        
        with open(log_path, "r") as f:
            for line in f:
                match = re.match(log_pattern, line)
                if match:
                    ip = match.group(1)
                    request = match.group(2)
                    status_code = match.group(3)
                    
                    # 统计IP请求次数
                    ip_requests[ip] += 1
                    
                    # 统计错误请求
                    if status_code in error_codes:
                        error_requests[ip] += 1
                    
                    # 统计敏感路径访问
                    for path in sensitive_paths:
                        if path in request:
                            path_requests[path] += 1
        
        # 输出分析结果
        print("=== Nginx日志分析结果 ===")
        print("\n[*] 请求次数最多的10个IP:")
        for ip, count in sorted(ip_requests.items(), key=lambda x: x[1], reverse=True)[:10]:
            print(f"{ip}: {count}次")
        
        print("\n[*] 错误请求最多的10个IP:")
        for ip, count in sorted(error_requests.items(), key=lambda x: x[1], reverse=True)[:10]:
            print(f"{ip}: {count}次")
        
        print("\n[*] 敏感路径访问统计:")
        for path, count in path_requests.items():
            print(f"{path}: {count}次")
    
    if __name__ == "__main__":
        analyze_nginx_log()
    

    使用说明

    1. 修改`log_path`为你的Nginx日志文件路径

    2. 调整`error_codes`和`sensitive_paths`适配你的业务场景

    3. 可以将该脚本加入定时任务,每日自动分析日志

    4. 结合IP封禁策略,可以有效防范暴力破解和扫描行为

    2.5 加密解密脚本

    功能:使用AES算法对文件进行加密解密,保障数据安全。

    python
    from cryptography.fernet import Fernet
    from cryptography.hazmat.primitives import hashes
    from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
    from cryptography.hazmat.backends import default_backend
    import os
    import base64
    
    def generate_key(password: bytes, salt: bytes) -> bytes:
        """根据密码和盐生成加密密钥"""
        kdf = PBKDF2HMAC(
            algorithm=hashes.SHA256(),
            length=32,
            salt=salt,
            iterations=480000,
            backend=default_backend()
        )
        return base64.urlsafe_b64encode(kdf.derive(password))
    
    def encrypt_file(file_path: str, password: str):
        """加密文件"""
        # 生成随机盐
        salt = os.urandom(16)
        key = generate_key(password.encode(), salt)
        fernet = Fernet(key)
        
        with open(file_path, "rb") as f:
            data = f.read()
        
        encrypted_data = fernet.encrypt(data)
        
        # 将盐和加密数据一起写入文件
        with open(f"{file_path}.encrypted", "wb") as f:
            f.write(salt + encrypted_data)
        
        print(f"[+] 文件已加密:{file_path}.encrypted")
        # 可选:删除原文件
        # os.remove(file_path)
    
    def decrypt_file(encrypted_file_path: str, password: str):
        """解密文件"""
        with open(encrypted_file_path, "rb") as f:
            # 读取前16字节作为盐
            salt = f.read(16)
            encrypted_data = f.read()
        
        key = generate_key(password.encode(), salt)
        fernet = Fernet(key)
        
        try:
            decrypted_data = fernet.decrypt(encrypted_data)
            # 生成解密后的文件名
            original_path = encrypted_file_path.replace(".encrypted", "")
            with open(original_path, "wb") as f:
                f.write(decrypted_data)
            print(f"[+] 文件已解密:{original_path}")
        except Exception as e:
            print("[-] 解密失败,密码错误或文件已损坏")
    
    if __name__ == "__main__":
        import sys
        if len(sys.argv) != 4:
            print("使用方法:")
            print("加密:python encrypt.py encrypt <文件路径> <密码>")
            print("解密:python encrypt.py decrypt <加密文件路径> <密码>")
            sys.exit(1)
        
        action = sys.argv[1]
        file_path = sys.argv[2]
        password = sys.argv[3]
        
        if action == "encrypt":
            encrypt_file(file_path, password)
        elif action == "decrypt":
            decrypt_file(file_path, password)
        else:
            print("[-] 无效操作,请使用encrypt或decrypt")
    

    使用说明

    1. 加密文件:`python script.py encrypt secret.txt yourpassword`

    2. 解密文件:`python script.py decrypt secret.txt.encrypted yourpassword`

    3. 该脚本使用AES-256加密算法,安全性高

    4. 请牢记加密密码,密码丢失后无法恢复文件内容

    2.6 防火墙规则配置脚本

    功能:自动配置Linux iptables防火墙规则,提升系统安全性。

    python
    import iptc
    
    def setup_basic_firewall():
        """配置基础防火墙规则"""
        # 清空现有规则
        table = iptc.Table(iptc.Table.FILTER)
        table.flush()
        
        # 设置默认策略
        chain_input = iptc.Chain(table, "INPUT")
        chain_forward = iptc.Chain(table, "FORWARD")
        chain_output = iptc.Chain(table, "OUTPUT")
        
        chain_input.set_policy("DROP")
        chain_forward.set_policy("DROP")
        chain_output.set_policy("ACCEPT")
        
        # 允许本地回环
        rule = iptc.Rule()
        rule.in_interface = "lo"
        target = iptc.Target(rule, "ACCEPT")
        rule.target = target
        chain_input.append_rule(rule)
        
        # 允许已建立和相关的连接
        rule = iptc.Rule()
        rule.protocol = "tcp"
        match = rule.add_match("state")
        match.state = "RELATED,ESTABLISHED"
        rule.target = iptc.Target(rule, "ACCEPT")
        chain_input.append_rule(rule)
        
        # 允许SSH端口
        rule = iptc.Rule()
        rule.protocol = "tcp"
        match = rule.add_match("tcp")
        match.dport = "22"
        rule.target = iptc.Target(rule, "ACCEPT")
        chain_input.append_rule(rule)
        
        # 允许HTTP和HTTPS端口
        for port in ["80", "443"]:
            rule = iptc.Rule()
            rule.protocol = "tcp"
            match = rule.add_match("tcp")
            match.dport = port
            rule.target = iptc.Target(rule, "ACCEPT")
            chain_input.append_rule(rule)
        
        table.commit()
        print("[+] 基础防火墙规则配置完成")
        print("[*] 已开放端口:22(SSH), 80(HTTP), 443(HTTPS)")
    
    def block_ip(ip_address):
        """封禁指定IP"""
        table = iptc.Table(iptc.Table.FILTER)
        chain_input = iptc.Chain(table, "INPUT")
        
        rule = iptc.Rule()
        rule.src = ip_address
        rule.target = iptc.Target(rule, "DROP")
        chain_input.append_rule(rule)
        
        table.commit()
        print(f"[+] 已封禁IP:{ip_address}")
    
    if __name__ == "__main__":
        import sys
        if len(sys.argv) < 2:
            print("使用方法:")
            print("配置基础规则:python firewall.py setup")
            print("封禁IP:python firewall.py block ")
            sys.exit(1)
        
        action = sys.argv[1]
        if action == "setup":
            setup_basic_firewall()
        elif action == "block":
            if len(sys.argv) != 3:
                print("[-] 请指定要封禁的IP地址")
                sys.exit(1)
            block_ip(sys.argv[2])
        else:
            print("[-] 无效操作")
    

    使用说明

    1. 配置基础防火墙:`python firewall.py setup`

    2. 封禁恶意IP:`python firewall.py block 192.168.1.100`

    3. 该脚本需要root权限运行

    4. 配置前请确保SSH端口已开放,避免被防火墙拦截无法远程连接

    2.7 入侵检测脚本

    功能:实时监控网络流量,识别常见攻击行为。

    python
    from scapy.all import sniff, IP, TCP, UDP, ICMP
    from collections import defaultdict
    import time
    
    # 配置参数
    alert_threshold = 100  # 同一IP10秒内请求超过100次则告警
    port_scan_ports = set()
    ip_request_count = defaultdict(int)
    last_reset_time = time.time()
    
    def alert(message):
        """发送告警"""
        print(f"[!] 告警:{message}")
        # 可以扩展为邮件、短信、飞书等通知方式
    
    def packet_handler(packet):
        global last_reset_time
        
        # 每秒重置一次计数
        current_time = time.time()
        if current_time - last_reset_time > 10:
            ip_request_count.clear()
            last_reset_time = current_time
        
        if IP in packet:
            src_ip = packet[IP].src
            dst_ip = packet[IP].dst
            
            # 统计IP请求次数
            ip_request_count[src_ip] += 1
            
            # 检测端口扫描行为
            if TCP in packet and packet[TCP].flags == "S":  # SYN包
                dst_port = packet[TCP].dport
                port_scan_ports.add(dst_port)
                
                # 短时间内访问大量不同端口,可能是端口扫描
                if len(port_scan_ports) > 20:
                    alert(f"检测到可能的端口扫描行为,来源IP:{src_ip},扫描端口数:{len(port_scan_ports)}")
                    port_scan_ports.clear()
            
            # 检测DoS攻击
            if ip_request_count[src_ip] > alert_threshold:
                alert(f"检测到可能的DoS攻击,来源IP:{src_ip},请求次数:{ip_request_count[src_ip]}")
            
            # 检测ICMP洪水攻击
            if ICMP in packet:
                icmp_count = sum(1 for ip, count in ip_request_count.items() if ip == src_ip and ICMP in packet)
                if icmp_count > 50:
                    alert(f"检测到可能的ICMP洪水攻击,来源IP:{src_ip}")
    
    if __name__ == "__main__":
        print("[*] 入侵检测系统已启动,正在监控网络流量...")
        print("[*] 按Ctrl+C停止监控")
        try:
            sniff(prn=packet_handler, store=0)
        except KeyboardInterrupt:
            print("\n[*] 停止监控")
    

    使用说明

    1. 该脚本需要root权限运行

    2. 可以调整`alert_threshold`参数适配不同的业务场景

    3. 可以扩展告警方式,实现飞书、邮件等实时通知

    4. 建议配合防火墙使用,自动封禁攻击IP

    2.8 备份加密脚本

    功能:自动备份重要文件并加密,防止数据泄露。

    python
    import os
    import shutil
    import datetime
    from cryptography.fernet import Fernet
    import zipfile
    
    # 配置参数
    backup_paths = ["/var/www", "/home/user/documents"]  # 要备份的目录
    backup_destination = "/backup"  # 备份存储路径
    encryption_password = "your_strong_password"  # 加密密码
    retention_days = 7  # 备份保留天数
    
    def generate_key(password: str) -> bytes:
        """生成加密密钥"""
        from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
        from cryptography.hazmat.primitives import hashes
        from cryptography.hazmat.backends import default_backend
        import base64
        
        salt = b'fixed_salt_for_backup'  # 实际使用时建议使用随机盐并单独保存
        kdf = PBKDF2HMAC(
            algorithm=hashes.SHA256(),
            length=32,
            salt=salt,
            iterations=100000,
            backend=default_backend()
        )
        return base64.urlsafe_b64encode(kdf.derive(password.encode()))
    
    def encrypt_file(file_path: str, key: bytes):
        """加密单个文件"""
        fernet = Fernet(key)
        
        with open(file_path, "rb") as f:
            data = f.read()
        
        encrypted_data = fernet.encrypt(data)
        
        with open(f"{file_path}.encrypted", "wb") as f:
            f.write(encrypted_data)
        
        os.remove(file_path)
        return f"{file_path}.encrypted"
    
    def create_backup():
        """创建备份"""
        # 生成备份文件名
        timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
        backup_name = f"backup_{timestamp}"
        backup_zip = os.path.join(backup_destination, f"{backup_name}.zip")
        
        # 创建压缩包
        with zipfile.ZipFile(backup_zip, "w", zipfile.ZIP_DEFLATED) as zipf:
            for path in backup_paths:
                for root, dirs, files in os.walk(path):
                    for file in files:
                        file_path = os.path.join(root, file)
                        arcname = os.path.relpath(file_path, os.path.dirname(path))
                        zipf.write(file_path, arcname)
        
        print(f"[+] 备份文件已创建:{backup_zip}")
        
        # 加密备份文件
        key = generate_key(encryption_password)
        encrypted_backup = encrypt_file(backup_zip, key)
        print(f"[+] 备份文件已加密:{encrypted_backup}")
        
        # 清理过期备份
        cleanup_old_backups()
    
    def cleanup_old_backups():
        """清理超过保留期限的备份"""
        now = time.time()
        for filename in os.listdir(backup_destination):
            file_path = os.path.join(backup_destination, filename)
            if os.path.isfile(file_path) and filename.startswith("backup_") and filename.endswith(".zip.encrypted"):
                file_time = os.path.getmtime(file_path)
                if (now - file_time) > (retention_days * 24 * 3600):
                    os.remove(file_path)
                    print(f"[+] 已删除过期备份:{filename}")
    
    if __name__ == "__main__":
        create_backup()
        print("[+] 备份完成")
    

    使用说明

    1. 修改`backup_paths`为要备份的目录列表

    2. 设置强加密密码和备份保留天数

    3. 可以将脚本加入定时任务,实现自动定期备份

    4. 加密密码请妥善保管,丢失后无法恢复备份数据

    2.9 钓鱼邮件检测脚本

    功能:检测邮箱中的钓鱼邮件,识别常见诈骗特征。

    python
    import imaplib
    import email
    from email.header import decode_header
    import re
    
    # 配置参数
    imap_server = "imap.example.com"
    email_account = "your_email@example.com"
    email_password = "your_email_password"
    
    # 钓鱼邮件特征
    phishing_indicators = [
        r"urgent|immediate action required|verify your account|suspend",
        r"click here|confirm your|update your information",
        r"password|credit card|social security|bank account",
        r"won|prize|lottery|free money",
        r"@unlikely-domain\.com|spamdomain",  # 可疑发件人域名
    ]
    
    def decode_str(s):
        """解码邮件头字符串"""
        value, charset = decode_header(s)[0]
        if charset:
            value = value.decode(charset)
        return value
    
    def check_phishing_email():
        """检测最近的邮件是否为钓鱼邮件"""
        # 连接IMAP服务器
        imap = imaplib.IMAP4_SSL(imap_server)
        imap.login(email_account, email_password)
        imap.select("INBOX")
        
        # 搜索最近10封邮件
        status, messages = imap.search(None, "ALL")
        email_ids = messages[0].split()[-10:]  # 取最近10封
        
        for e_id in email_ids:
            status, msg_data = imap.fetch(e_id, "(RFC822)")
            for response_part in msg_data:
                if isinstance(response_part, tuple):
                    msg = email.message_from_bytes(response_part[1])
                    subject = decode_str(msg["Subject"])
                    from_ = decode_str(msg.get("From"))
                    print(f"\n[*] 检测邮件:{subject},发件人:{from_}")
                    
                    # 获取邮件正文
                    body = ""
                    if msg.is_multipart():
                        for part in msg.walk():
                            content_type = part.get_content_type()
                            if content_type == "text/plain" or content_type == "text/html":
                                try:
                                    body += part.get_payload(decode=True).decode()
                                except:
                                    pass
                    else:
                        try:
                            body = msg.get_payload(decode=True).decode()
                        except:
                            pass
                    
                    # 检测钓鱼特征
                    phishing_score = 0
                    for indicator in phishing_indicators:
                        if re.search(indicator, subject, re.IGNORECASE) or re.search(indicator, body, re.IGNORECASE):
                            phishing_score += 1
                    
                    if phishing_score >= 2:
                        print(f"[!] 疑似钓鱼邮件!风险得分:{phishing_score}")
                    else:
                        print(f"[+] 邮件正常,风险得分:{phishing_score}")
        
        imap.close()
        imap.logout()
    
    if __name__ == "__main__":
        check_phishing_email()
    

    使用说明

    1. 配置你的邮箱IMAP服务器地址、账号和密码

    2. 扩展`phishing_indicators`列表添加更多钓鱼特征

    3. 可以定期运行该脚本,自动检测垃圾邮件和钓鱼邮件

    4. 检测到高风险邮件时可以自动移动到垃圾邮件文件夹

    2.10 VPN连接管理脚本

    功能:自动管理VPN连接,实现定时连接断开和状态监控。

    python
    import openvpn_api
    import time
    import subprocess
    
    # 配置参数
    vpn_config_path = "/path/to/your/vpn/config.ovpn"
    vpn_username = "your_vpn_username"
    vpn_password = "your_vpn_password"
    check_interval = 60  # 状态检查间隔(秒)
    
    def connect_vpn():
        """连接VPN"""
        try:
            # 使用subprocess启动OpenVPN连接
            cmd = [
                "openvpn",
                "--config", vpn_config_path,
                "--auth-user-pass", "/tmp/vpn_auth.txt"
            ]
            
            # 写入认证信息
            with open("/tmp/vpn_auth.txt", "w") as f:
                f.write(f"{vpn_username}\n{vpn_password}")
            
            process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
            time.sleep(10)  # 等待连接建立
            
            # 检查连接状态
            if process.poll() is None:
                print("[+] VPN连接成功")
                return process
            else:
                stdout, stderr = process.communicate()
                print(f"[-] VPN连接失败:{stderr.decode()}")
                return None
        except Exception as e:
            print(f"[-] 连接错误:{e}")
            return None
    
    def check_vpn_status(process):
        """检查VPN连接状态"""
        if process and process.poll() is None:
            # 检查是否获得VPN IP
            try:
                result = subprocess.run(
                    ["curl", "-s", "ifconfig.me"],
                    capture_output=True,
                    text=True,
                    timeout=10
                )
                public_ip = result.stdout.strip()
                print(f"[*] VPN连接正常,公网IP:{public_ip}")
                return True
            except:
                print("[-] VPN连接异常,无网络访问")
                return False
        else:
            print("[-] VPN进程已退出")
            return False
    
    def disconnect_vpn(process):
        """断开VPN连接"""
        if process:
            process.terminate()
            process.wait()
            os.remove("/tmp/vpn_auth.txt")
            print("[+] VPN已断开连接")
    
    if __name__ == "__main__":
        print("[*] 启动VPN连接管理")
        vpn_process = connect_vpn()
        
        try:
            while True:
                if not check_vpn_status(vpn_process):
                    print("[*] 尝试重新连接VPN...")
                    if vpn_process:
                        disconnect_vpn(vpn_process)
                    vpn_process = connect_vpn()
                
                time.sleep(check_interval)
        except KeyboardInterrupt:
            print("\n[*] 停止VPN管理")
            if vpn_process:
                disconnect_vpn(vpn_process)
    

    使用说明

    1. 配置你的OpenVPN配置文件路径、用户名和密码

    2. 脚本会自动连接VPN并定期检查状态,异常时自动重连

    3. 需要root权限运行OpenVPN客户端

    4. 可以扩展实现按时间段自动连接断开VPN的功能

    三、新手常见踩坑指南

    3.1 法律合规风险

  • **问题**:使用安全工具对未授权的系统进行扫描或攻击,可能触犯《网络安全法》,承担刑事责任
  • **解决方案**:
  • 1. 所有工具仅可用于自己拥有所有权或获得明确授权的系统

    2. 进行安全测试前必须获得书面授权,明确测试范围和时间

    3. 发现漏洞后及时通知系统所有者,不得利用漏洞进行非法操作

    4. 遵守当地法律法规,不要开发或使用具有破坏性的恶意工具

    3.2 误操作风险

  • **问题**:配置防火墙、运行漏洞扫描等操作可能导致业务中断或数据丢失
  • **解决方案**:
  • 1. 操作前备份重要数据和配置文件,制定回滚方案

    2. 先在测试环境验证脚本功能,确认无误后再在生产环境运行

    3. 防火墙配置前确保SSH等管理端口已开放,避免被防火墙拦截无法远程连接

    4. 加密文件前确认密码正确,加密后验证解密功能正常再删除原文件

    3.3 工具使用注意事项

  • **问题**:工具使用不当可能导致安全风险或误报
  • **解决方案**:
  • 1. 不要在公共网络环境下运行端口扫描、漏洞扫描等工具,避免被误认为攻击行为

    2. 弱密码检测使用的字典文件不要包含他人隐私信息

    3. 日志分析和入侵检测工具需要根据业务场景调整阈值,减少误报

    4. 定期更新安全库和特征库,提高检测准确率

    四、变现盈利方向:网络安全的商业价值

    网络安全是目前IT行业最紧缺的方向之一,掌握Python网络安全技能后,有非常多的变现路径。

    4.1 安全服务外包

  • **接单平台**:程序员客栈、码市、安全客、FreeBuf等安全社区
  • **常见需求**:企业漏洞扫描、渗透测试、安全加固、代码审计、应急响应等
  • **报价参考**:小型网站安全检测2000-5000元/次,企业系统渗透测试1-5万/项目,应急响应服务5000-2万/次
  • **接单技巧**:先从简单的漏洞扫描和安全配置做起,积累案例和客户口碑,逐步承接更大的项目
  • 4.2 企业安全评估

  • **目标客户**:中小微企业、电商网站、互联网创业公司
  • **服务内容**:安全体系搭建、等保合规咨询、安全培训、定期安全巡检等
  • **收费模式**:单次评估服务5-20万/次,年度安全顾问服务10-50万/年
  • **优势**:客户粘性高,长期合作稳定,不需要频繁寻找新客户
  • 4.3 网络安全培训

  • **变现方式**:录制网络安全相关课程在知识付费平台售卖,或者提供1对1私教辅导
  • **热门方向**:Python安全编程、渗透测试实战、网络安全入门、等保合规培训等
  • **定价参考**:录播课程199-699元/套,1对1辅导300-800元/小时,企业内训2-5万/天
  • **优势**:一次课程录制可以长期售卖,边际成本低,还能提升个人行业知名度
  • 4.4 安全工具开发

  • **产品方向**:开发安全检测工具、漏洞扫描工具、企业安全管理平台等
  • **变现方式**:开源免费+企业付费支持、SaaS订阅服务、企业定制开发等
  • **市场机会**:很多中小企业需要轻量化的安全工具,但买不起昂贵的商业安全产品
  • **成功案例**:国内很多个人
  • © 版权声明

    相关文章

    暂无评论

    none
    暂无评论...