python实现服务端与客户端加密通讯代理服务代码
代码语言:python
所属分类:其他
代码描述:python实现服务端与客户端加密通讯代理服务代码,客户端与服务端都要运行这个代码建立加密通讯隧道,然后进行代理访问, 加密传输 - 使用AES-256加密所有流量 支持HTTP/HTTPS - 支持普通HTTP和HTTPS(CONNECT)代理 双向转发 - 高效的数据双向转发 多线程 - 支持多个并发连接 简单部署 - 单文件,易于部署
代码标签: python 服务端 客户端 加密 通讯 代理 服务 代码
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
# ## 使用说明
# ### 1. 安装依赖
# ```bash
# pip install pycryptodome
# ```
# ### 2. 修改密钥
# 在代码开头修改 `SECRET_KEY`,服务端和客户端必须使用相同的密钥:
# ```python
# SECRET_KEY = b'your-secret-key-change-this!!'
# ```
# ### 3. 运行服务端(在有公网IP的服务器上)
# ```bash
# python proxy.py server --port 8888
# ```
# ### 4. 运行客户端(在本地电脑上)
# ```bash
# python proxy.py client --server-host <服务器IP> --server-port 8888 --local-port 1080
# ```
# ### 5. 配置浏览器代理
# 将浏览器的HTTP代理设置为:`127.0.0.1:1080`
# ## 功能特点
# ✅ **加密传输** - 使用AES-256加密所有流量
# ✅ **支持HTTP/HTTPS** - 支持普通HTTP和HTTPS(CONNECT)代理
# ✅ **双向转发** - 高效的数据双向转发
# ✅ **多线程** - 支持多个并发连接
# ✅ **简单部署** - 单文件,易于部署
# ## 安全提示
# ⚠️ 请务必修改默认密钥
# ⚠️ 建议在生产环境添加身份验证
# ⚠️ 建议添加流量限制和访问控制
# ⚠️ 仅供学习使用,请遵守当地法律法规
#!/usr/bin/env python3
"""
加密代理程序 - 服务端和客户端合一
使用方法:
服务端: python proxy.py server --port 8888
客户端: python proxy.py client --server-host <服务器IP> --server-port 8888 --local-port 1080
"""
import socket
import threading
import argparse
import struct
import hashlib
import select
import time
try:
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
from Crypto.Util.Padding import pad, unpad
except ImportError:
print("请先安装加密库: pip install pycryptodome")
exit(1)
# ===== 配置 =====
SECRET_KEY = b'your-secret-key-change-this!!' # 请修改此密钥!
class Encryptor:
"""AES加密解密类"""
def __init__(self, key):
self.key = hashlib.sha256(key).digest()
def encrypt(self, data):
"""加密数据"""
iv = get_random_bytes(16)
cipher = AES.new(self.key, AES.MODE_CBC, iv)
encrypted = cipher.encrypt(pad(data, AES.block_size))
return iv + encrypted
def decrypt(self, data):
"""解密数据"""
if len(data) < 16:
raise ValueError("数据太短")
iv = data[:16]
encrypted = data[16:]
cipher = AES.new(self.key, AES.MODE_CBC, iv)
return unpad(cipher.decrypt(encrypted), AES.block_size)
class ProxyServer:
"""代理服务端 - 接收加密请求并代理访问"""
def __init__(self, host='0.0.0.0', port=8888):
self.host = host
self.port = port
self.encryptor = Encryptor(SECRET_KEY)
def start(self):
"""启动服务端"""
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server.bind((self.host, self.port))
server.listen(200)
print(f"[服务端] 监听在 {self.host}:{self.port}")
while True:
try:
client_sock, addr = server.accept()
print(f"[服务端] 新连接: {addr[0]}:{addr[1]}")
threading.Thread(
target=self.handle_client,
args=(client_sock,),
daemon=True
).start()
except KeyboardInterrupt:
print("\n[服务端] 正在关闭...")
break
except Exception as e:
print(f"[服务端] 错误: {e}")
def handle_client(self.........完整代码请登录后点击上方下载按钮下载查看















网友评论0