Skip to content

Fix max CCS fingerprint#29

Open
Fangliding wants to merge 2 commits intoXTLS:mainfrom
Fangliding:main
Open

Fix max CCS fingerprint#29
Fangliding wants to merge 2 commits intoXTLS:mainfrom
Fangliding:main

Conversation

@Fangliding
Copy link
Member

@Fangliding Fangliding commented Feb 16, 2026

这样应该就没问题了 就是被探测的网站根据行为可以知道被设置为reality dest了 或者像之前说的允许用户手动设置 嗯。。。

话说我都没这仓库的write权限((

@Fangliding
Copy link
Member Author

目前的局限性有几个
网站会知道你在用reality指向它(这种探测过于明显)
大多数网站需要64倍rtt的时间完成探测(不过应该没人dest选延迟太高的服务器给自己找补吧) 如果延迟比较低比如30ms那两秒不到可以探测完成
理论上在极端网络波动下下小于32的服务器可能返回一个略大的值 比如16变成17
部分网站的行为是无限 我拿3xui的内置表试了下 aws因为使用自有TLS实现 实际限制是无限(97是探测工具写的探测上限不是实际)
image

还有几个方案
1 固定四个挡位 1 16 32 ∞ 探测出它们比较简单
2 用户手填 不探测了 默认就 32 可以满足大多数情况

@kyber1024
Copy link

kyber1024 commented Feb 19, 2026

有无可能类似TLSmirror那样把不来自可信客户端的所有流量,包括但不限于不合法的client hello,未通过协商的密钥加密的包,全都发给dest.但是者意味着需要为每一个用户的连接维护一个匹配的和dest的tls1.3连接.好处可以解决几乎所有的edge case

@RPRX
Copy link
Member

RPRX commented Feb 21, 2026

已知 Golang TLS 的 NewSessionTicket 都在 ClientFinished 前,或许可以简单些?

另外应当像 uTLS 库一样标出哪些修改专属于 REALITY,防止以后再被误改

@Fangliding
Copy link
Member Author

Fangliding commented Feb 21, 2026

不太行 各家TLS有的有一定程度魔改 比如cloudflare 虽然max ccs是32 但是它和golang一样不会在握手完成后立即发这个有特征的NewSessionTicket

@Fangliding
Copy link
Member Author

而且这个PostHandshakeRecords不一定来自NewSessionTicket消息 它还可能来自h2服务器看到h2 alpn后发来的一些前置信息

@RPRX
Copy link
Member

RPRX commented Feb 21, 2026

主要是我测试 REALITY 都是本地跑的那不就把我卖了,虽然这完成了探测的 TODO

record_detect.go 就别改名了吧,另外哪里是 REALITY 针对 TLS 改的部分标一下,防止再同步错了

@RPRX
Copy link
Member

RPRX commented Mar 21, 2026

@Fangliding 改成固定探测四个挡位吧 1 16 32 ∞,先发 2 个,再发 15 个,再发 16 个,三次即可完成探测,文件先别改名了

@Fangliding
Copy link
Member Author

为啥不改名呢

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

3 participants