go实现客户端与服务端加密通讯代理访问代码

代码语言:golang

所属分类:其他

代码描述:go实现客户端与服务端加密通讯代理访问代码,客户端与服务端都要运行这个代码建立加密通讯隧道,然后进行代理访问, 加密传输 - 使用AES-256加密所有流量 支持HTTP/HTTPS - 支持普通HTTP和HTTPS(CONNECT)代理 双向转发 - 高效的数据双向转发 多线程 - 支持多个并发连接 简单部署 - 单文件,易于部署

代码标签: go 加密 通讯 代理 访问 代码

下面为部分代码预览,完整代码请点击下载或在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