最近想自己写一个简单的科学上网工具 想法是这样的: 主要分为 3 各部分,
浏览器根据 socks5 协议发送数据给本地 tcp proxy,本地 tcp proxy 加密数据,发送给远程 tcp proxy,远程 tcp proxy 解密数据发给 socks 服务器代替浏览器做请求。
本地测试没有问题,但是一旦把 tcp proxy 和 socks 服务器真的部署到另一台机器上,就不行了。 会一直报错:
// 代码大概长是这样
// encrypt 和 decrypt 就是简单的 AES 对称加密: https://github.com/timqian/viti/blob/master/src/utils/encrypt.js
// repo: https://github.com/timqian/viti/
net.createServer({allowHalfOpen: true}, localsocket => {
// connect to remote tcp server
const remotesocket = new net.Socket();
remotesocket.connect(remotePort, remoteHost);
localsocket.on('data', data => {
encrypt(data, password);
remotesocket.write(data)
});
remotesocket.on('data', data => {
decrypt(data, password);
localsocket.write(data);
});
}
## 报的错误
# local
Error: This socket is closed
at Socket._writeGeneric (net.js:732:18)
at Socket._write (net.js:792:8)
at doWrite (_stream_writable.js:388:12)
at writeOrBuffer (_stream_writable.js:374:5)
at Socket.Writable.write (_stream_writable.js:291:11)
at Socket.write (net.js:710:40)
at Socket.remotesocket.on.data (/Users/timqian/Documents/viti/src/utils/getEncryptedProxy.js:20:23)
at Socket.emit (events.js:159:13)
at addChunk (_stream_readable.js:265:12)
at readableAddChunk (_stream_readable.js:252:11)
# remote
{ Error: This socket has been ended by the other party
at Socket.writeAfterFIN [as write] (net.js:365:12)
at Socket.localsocket.on.data (/usr/lib/node_modules/viti/src/utils/getEncryptedProxy.js:12:25)
at Socket.emit (events.js:159:13)
at addChunk (_stream_readable.js:265:12)
at readableAddChunk (_stream_readable.js:252:11)
at Socket.Readable.push (_stream_readable.js:209:10)
at TCP.onread (net.js:608:20) code: 'EPIPE' }
即使两个机器都在国内也是不行 不知道是代码问题还是墙的作用
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.