一个基于低功耗蓝牙(BLE)的 HTTP 代理系统,通过 iOS 设备路由网络浏览器流量。这使得浏览器可以利用 BLE 作为传输层,通过 iOS 设备的互联网连接进行网页浏览。
Browser → Windows Proxy → BLE/TCP → iOS/Mock Service → WiFi → Internet
← Windows Proxy ← BLE/TCP ← iOS/Mock Service ← WiFi ←
windows-proxy/)127.0.0.1:8080(默认)mock-ios-service/)127.0.0.1:9999(默认)终端 1 - 启动模拟 iOS 服务:
cd mock-ios-service
npm install
npm start
终端 2 - 以模拟模式启动 Windows 代理:
cd windows-proxy
npm install
npm run mock
配置浏览器:
127.0.0.1:8080终端 1 - 启动 Windows 代理:
cd windows-proxy
npm install
npm start
iOS 设备:
配置浏览器:
127.0.0.1:8080所有数据均以压缩的分块格式传输:
[4字节长度头][压缩的 JSON 载荷]
// 请求
{
id: "uuid", // 唯一请求 ID
method: "GET", // HTTP 方法
url: "https://...", // 目标 URL
headers: {}, // HTTP 头
body: "base64...", // 请求体(base64)
isConnect: false // HTTPS CONNECT 标志
}
// 响应
{
id: "uuid", // 匹配的请求 ID
statusCode: 200, // HTTP 状态码
headers: {}, // 响应头
body: "base64...", // 响应体(base64)
success: true // 用于 CONNECT 请求
}
// windows-proxy/config.js
{
proxy: {
host: "127.0.0.1",
port: 8080,
timeout: 30000
},
ble: {
serviceUUID: "a1b2c3d4-...",
// ... 其他 UUID
}
}
# 模拟模式
MOCK_MODE=true
# 代理设置
PROXY_HOST=127.0.0.1
PROXY_PORT=8080
# BLE UUID
BLE_SERVICE_UUID=a1b2c3d4-e5f6-7890-1234-567890abcdef
# 模拟服务
MOCK_SERVICE_HOST=127.0.0.1
MOCK_SERVICE_PORT=9999
127.0.0.1:8080127.0.0.1:8080localhost, 127.0.0.1127.0.0.1 端口:8080127.0.0.1 端口:8080ble_proxy/
├── windows-proxy/ # Windows BLE 中心设备 + HTTP 代理
│ ├── proxy.js # 主代理服务器
│ ├── ble-client.js # 真实 BLE 客户端
│ ├── mock-ble-client.js # 模拟 BLE 客户端(TCP)
│ ├── config.js # 配置
│ └── demo.js # 演示脚本
├── mock-ios-service/ # 模拟 iOS BLE 外围设备
│ ├── mock-ios.js # 主 TCP 服务器
│ ├── http-client.js # HTTP 请求处理器
│ └── demo.js # 演示脚本
└── ios-app/ # iOS 原生应用(未来)
单元测试:
# 测试 Windows 代理
cd windows-proxy
npm test
# 测试模拟服务
cd mock-ios-service
npm test
集成测试:
# 启动两个服务并使用 curl 测试
curl -x http://127.0.0.1:8080 https://httpbin.org/ip
启用调试日志:
# Windows 代理
NODE_ENV=development npm start
# 模拟服务
NODE_ENV=development npm start
BLE 调试(Windows):
# 检查 BLE 适配器状态
Get-PnpDevice | Where-Object {$_.Name -like "*Bluetooth*"}
# 监控 BLE 流量(需要工具)
# BLE 无法工作
npm run mock # 改用模拟模式
# 端口已被占用
netstat -ano | findstr :8080
# 依赖安装失败
npm run install-build-tools
# 9999 端口被占用
netstat -ano | findstr :9999
# 连接被拒绝
# 确保模拟服务先于代理启动
# 清除代理设置
# 检查 Windows 代理设置
# 禁用其他 VPN/代理
⚠️ 这是一个开发/测试工具。请注意安全影响:
git checkout -b feature/name)MIT 许可证 - 详情请参见 LICENSE 文件
状态:✅ 模拟测试就绪 | 🚧 iOS 应用开发中 | 📋 生产功能规划中