加密 tcp 数据无法传输的问题

2017-12-19 13:44:11 +08:00
 timqian

最近想自己写一个简单的科学上网工具 想法是这样的: 主要分为 3 各部分,

  1. 本地的一个 tcp proxy
  2. 远程的一个 tcp proxy
  3. 远程的一个 socks5 服务器

浏览器根据 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' }

即使两个机器都在国内也是不行 不知道是代码问题还是墙的作用

源码: https://github.com/timqian/viti/

546 次点击
所在节点    信息安全
3 条回复
frozenway
2017-12-19 14:06:57 +08:00
这不是 shadow 袜的工作原理吗?
timqian
2017-12-19 14:27:35 +08:00
@frozenway 是的,学习下
onsale
2017-12-19 14:58:54 +08:00
onplus/shadowsocks-websocket-python

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/415970

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX