go实现客户端与服务端加密通讯代理访问代码
代码语言:golang
所属分类:其他
代码描述:go实现客户端与服务端加密通讯代理访问代码,客户端与服务端都要运行这个代码建立加密通讯隧道,然后进行代理访问, 加密传输 - 使用AES-256加密所有流量 支持HTTP/HTTPS - 支持普通HTTP和HTTPS(CONNECT)代理 双向转发 - 高效的数据双向转发 多线程 - 支持多个并发连接 简单部署 - 单文件,易于部署
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
// ## 使用说明
// ### 1. 保存代码
// 将代码保存为 `proxy.go`
// ### 2. 修改密钥
// 在代码开头修改 `SECRET_KEY` 常量,服务端和客户端必须使用相同的密钥:
// ```go
// const SECRET_KEY = "your-secret-key-change-this!!"
// ```
// ### 3. 编译(可选)
// ```bash
// # 编译服务端(Linux)
// GOOS=linux GOARCH=amd64 go build -o proxy-server proxy.go
// # 编译客户端(Windows)
// GOOS=windows GOARCH=amd64 go build -o proxy-client.exe proxy.go
// # 编译客户端(macOS)
// GOOS=darwin GOARCH=amd64 go build -o proxy-client proxy.go
// # 本地编译
// go build -o proxy proxy.go
// ```
// ### 4. 运行服务端(在有公网IP的服务器上)
// ```bash
// # 直接运行
// go run proxy.go -mode=server -port=8888
// # 或使用编译后的二进制
// ./proxy -mode=server -port=8888
// ```
// ### 5. 运行客户端(在本地电脑上)
// ```bash
// # 直接运行
// go run proxy.go -mode=client -server-host=<服务器IP> -server-port=8888 -local-port=1080
// # 或使用编译后的二进制
// ./proxy -mode=client -server-host=1.2.3.4 -server-port=8888 -local-port=1080
// ```
// ### 6. 配置浏览器代理
// 将浏览器的HTTP代理设置为:`127.0.0.1:1080`
// ## 命令行参数
// **服务端参数:**
// - `-mode=server` - 运行模式(必需)
// - `-host=0.0.0.0` - 监听地址(默认:0.0.0.0)
// - `-port=8888` - 监听端口(默认:8888)
// **客户端参数:**
// - `-mode=client` - 运行模式(必需)
// - `-server-host=<IP>` - 服务器地址(必需)
// - `-server-port=8888` - 服务器端口(默认:8888)
// - `-local-host=127.0.0.1` - 本地监听地址(默认:127.0.0.1)
// - `-local-port=1080` - 本地监听端口(默认:1080)
// ## 功能特点
// ✅ **AES-256加密** - 使用CBC模式加密所有流量
// ✅ **支持HTTP/HTTPS** - 完整支持HTTP和HTTPS(CONNECT)代理
// ✅ **高性能** - Go协程实现,支持高并发
// ✅ **跨平台** - 可编译为Linux/Windows/macOS等多平台
// ✅ **单文件部署** - 编译后单个可执行文件
// ✅ **双向转发** - 高效的并发数据转发
// ## 性能优化建议
// 1. **调整缓冲区大小**:可以修改 `buffer := make([]byte, 32*1024)` 来调整性能
// 2. **连接池**:可以添加连接池来复用服务器连接
// 3. **限流控制**:可以添加流量限制和并发连接数限制
// ## 安全提示
// ⚠️ **请务必修改默认密钥**
// ⚠️ **建议添加身份验证机制**
// ⚠️ **建议添加访问控制和IP白名单**
// ⚠️ **建议添加流量监控和日志记录**
// ⚠️ **仅供学习使用,请遵守当地法律法规**
package main
import (
"bytes"
"crypto/aes"
"crypto/cipher"
"crypto/rand"
"crypto/sha256"
"encoding/binary"
"flag"
"fmt"
"io"
"log"
"net"
"strings"
"sync"
"time"
)
// ===== 配置 =====
const SECRET_KEY = "your-secret-key-change-this!!" // 请修改此密钥!
// ===== 加密工具 =====
type Encryptor struct {
key []byte
}
func NewEncryptor(password string) *Encryptor {
hash := sha256.Sum256([]byte(password))
return &Encryptor{key: hash[:]}
}
// 加密数据
func (e *Encryptor) Encrypt(data []byte) ([]byte, error) {
block, err := aes.NewCipher(e.key)
if err != nil {
return nil, err
}
// 填充数据
paddedData := pkcs7Padding(data, aes.BlockSize)
// 生成随机IV
iv := make([]byte, aes.BlockSize)
if _, err := io.ReadFull(rand.Reader, iv); err != nil {
return nil, err
}
// 加密
mode := cipher.NewCBCEncrypter(block, iv)
encrypted := make([]byte, len(paddedData))
mode.CryptBlocks(encrypted, paddedData)
// 返回 IV + 密文
retu.........完整代码请登录后点击上方下载按钮下载查看















网友评论0