Bestoa / shadowsocks-vertx

Java port of shadowsocks with vertx.
Apache License 2.0
27 stars 23 forks source link

做了一点加强,你看看要不? #48

Closed lenovobenben closed 5 years ago

lenovobenben commented 5 years ago

1 删除OTA。这个 OTA已过时,无法抵御攻击。 2 新增 RC4-MD5。我觉得这个加密,纯做混淆足够了。 3 自定义 IV 长度。自定义的IV长度。防止 SS 的 addrType 探测。 4 自定义超时时间。适配不同的网络质量。 5 新增 IPV6 支持。已经全面测试了IPV6。不管是目标网站是IPV6,还是VPS本身是IPV6。都没有问题。 6 新增随机噪音数据。有点费流量。但是更难主动探测。具体看代码。 7 自定义DNS服务器。服务器端统一使用谷歌的,分 IPV4 和 IPV6 两种。 8 升级依赖JAR。新的 VERTX 应该更好点吧。 就这些了。

祝工作愉快!

lenovobenben commented 5 years ago

另外,我删除了一些意义不大的算法。 删除了命令行模式,只能用 JSON 导入。我觉得写命令行太麻烦了。

这样搞和原生的SS就不兼容了。 不过,我为啥要兼容它呢?自己能用就行了。反正也不是官方版本。。。

我这个还是不支持AEAD。 加上噪音数据就不用AEAD了吧?你觉得呢?

Bestoa commented 5 years ago

感谢. 加了一些comments.

1 删除OTA。这个 OTA已过时,无法抵御攻击。

Besto: +1 最新版本已经去掉了.

2 新增 RC4-MD5。我觉得这个加密,纯做混淆足够了。

Besto: +1 我也是这么想的, 纯属我懒, 没有实现.

3 自定义 IV 长度。自定义的IV长度。防止 SS 的 addrType 探测。

Besto: +1

4 自定义超时时间。适配不同的网络质量。

Besto: +1

5 新增 IPV6 支持。已经全面测试了IPV6。不管是目标网站是IPV6,还是VPS本身是IPV6。都没有问题。

Besto: +1 这个当时是因为没有测试环境(现在也没有 XD)

6 新增随机噪音数据。有点费流量。但是更难主动探测。具体看代码。

Besto: +1 只要可以主动选择是否关闭来兼容老的 就可以了.

7 自定义DNS服务器。服务器端统一使用谷歌的,分 IPV4 和 IPV6 两种。

Besto: +1

8 升级依赖JAR。新的 VERTX 应该更好点吧。

Besto: +1

另外,我删除了一些意义不大的算法。

Besto: +1 最新版本我已经把ofb类的都删了

删除了命令行模式,只能用 JSON 导入。我觉得写命令行太麻烦了。

Besto: 这个看个人喜好.

这样搞和原生的SS就不兼容了。 不过,我为啥要兼容它呢?自己能用就行了。反正也不是官方版本。。。

我这个还是不支持AEAD。 加上噪音数据就不用AEAD了吧?你觉得呢?

Besto: AEAD用BC的库已经可以实现, 有一些接口我稍微改了一下, 就是想实现aead的, 但, 基于太懒和我个人也觉得aead没有那么有用(对于自用, 最好每个人都魔改一点最好了)

为何要尽量兼容ss老的呢, 主要还是为了小飞机这种我没法修改的客户端.

现在CODE和master上的有一点不兼容, 我抽空merge一下(实在不行我把master上的一部分改动revert掉好了)

lenovobenben commented 5 years ago

噪音数据是可以配置 true / false 的。

只要 IV 长度和原生一样,同时关闭噪音。就是兼容原生SS,我也用原生的端测过。

IPV6的话,我是用 vultr 测试的。 这上边有双栈的机器,还有纯 IPV6 的!碉堡了。

我已经用了半年多了。感觉不错。所以通知你一下。

代码的话,我删了很多东西,你那边很多冲突。 建议你把 噪音和自定义IV长度的部分搞一下就行了,不用 merge 我的。

lenovobenben commented 5 years ago

你的这个BUG困扰了我很久 https://github.com/lenovobenben/shadowsocks-vertx/commit/29deaca9ef7fcb28b647adda425c12960d21f7a9

坑的我不要不要的。导致我自定义的IV长度,总是报各种奇怪的错误。

lenovobenben commented 5 years ago

忘了说了。我把你的测试代码都删了。 因为我曾经发生过测试代码通过了,通信仍然有问题的情况。 具体是什么BUG忘记了。 反正你的测试代码不靠谱的。。。

Bestoa commented 5 years ago

lenovobenben@29deaca 我看了一下 这个地方的逻辑应该不会影响自定义IV长度... 测试代码是本地建了一个server/client 去get一个固定网页, 再对比, 如果测试都没通过表明肯定是有问题, 但反之确实不代表测试过了就没问题...

Bestoa commented 5 years ago

对了, 说到测试我想起了一个BUG, 当时手抖写错了, 导致https状态下只有第一个接受发送的包是对的...每次都重发了一次数据, http访问居然没问题, https测试由于测试网站payload很短, 确实可以一个包吞下, 测试也过了, 实际使用打死都不行....确实测试还很不健壮..

lenovobenben commented 5 years ago

对了, 说到测试我想起了一个BUG, 当时手抖写错了, 导致https状态下只有第一个接受发送的包是对的...每次都重发了一次数据, http访问居然没问题, https测试由于测试网站payload很短, 确实可以一个包吞下, 测试也过了, 实际使用打死都不行....确实测试还很不健壮..

确实有这个问题!所以我索性不用你这个测了。直接用 chrome 实测

Bestoa commented 5 years ago

对了, 说到测试我想起了一个BUG, 当时手抖写错了, 导致https状态下只有第一个接受发送的包是对的...每次都重发了一次数据, http访问居然没问题, https测试由于测试网站payload很短, 确实可以一个包吞下, 测试也过了, 实际使用打死都不行....确实测试还很不健壮..

确实有这个问题!所以我索性不用你这个测了。直接用 chrome 实测

要解决这个问题, 还需要一个本地大文件, 本地搭一个server...我看看了本地比较有用的应该是控制流量的CL, 别的都可以先revert掉, 我来合一下...

lenovobenben commented 5 years ago

lenovobenben/shadowsocks-vertx@29deaca 我看了一下 这个地方的逻辑应该不会影响自定义IV长度... 测试代码是本地建了一个server/client 去get一个固定网页, 再对比, 如果测试都没通过表明肯定是有问题, 但反之确实不代表测试过了就没问题...

确实有影响。我的自定义IV长度代码很简单。 就是:如果和标准IV长度一致就不变。 反之则进行MD5。chacha20的则取了MD5的前8位。

我的代码认为 这个 iv 值一定是整个 iv 。哪能想到这个 iv 包含了 iv 之外的数据啊。 我当时打印了好多日志,才定位到原因。

lenovobenben commented 5 years ago

有个DNS解析的问题非常诡异。不知道你碰到过没?反正我的搬瓦工碰到过。

就是一个 VPS 不支持 IPV6。但是 vertx 去连接一个域名(双栈域名,比如 www.google.com)。却返回了 ipv6 地址(大部分情况返回的是 ipv4,极少数是 ipv6)!导致最终连接失败。

这种现象出现的概率极低,我遇到过五六次吧。 但是我确定是有的。当时是有日志记录的。

因此纯IPV4的环境我就强制加上了preferIPv4Stack 这个参数,彻底禁用掉IPV6。

网上有人说是 netty DNS 协议的 BUG,我就没深究过了。

Bestoa commented 5 years ago

Hard to merge directly. Merge to a tmp branch and will poring the change to the master branch. Thanks very much