Skip to content

Instantly share code, notes, and snippets.

View NullPointerMaker's full-sized avatar

无矢 NullPointerMaker

View GitHub Profile

最近 XTLS 项目如火如荼,翻墙界还能这么热闹也很令人欣慰。

但是这个项目的方向其实有很大问题——重复发明加密协议。
基本上是走了一遍 Shadowsocks 当年的老路。

Shadowsocks 协议几经发展,历经诸多波折,最终定稿为 AEAD,然而 AEAD 其实就是 TLS 的算法。

XTLS 也走上了类似的方向,不过看起来更加直接。与其模仿 TLS,不如“优化”TLS:
把用不到的算法、格式、逻辑精简掉,XTLS 便这样实现了。

@NullPointerMaker
NullPointerMaker / TrojanGfwAndCdn.md
Created March 14, 2021 14:19
为什么 Trojan 不支持 CDN

Trojan-GFW 其实是基于 HTTPS(基于 SSL 的 HTTP 协议)正向代理实现的,修改了握手的特征,加入了随机数据量混淆。

而 CDN 是反向代理,不能正确处理 HTTP 代理请求头(主要是不支持 HTTP Connect)。

原因就是这么简单。

为了穿过反向代理,就需要在 HTTP 协议的基础上创建一个新的协议。
与其重复发明轮子,不如使用现成的 WebSocket 协议,快捷高效。
Trojan-Go 就是这么做的。

@NullPointerMaker
NullPointerMaker / Cmd.Bat
Last active June 30, 2021 10:30
Launchers
@Echo Off
@Rem Batch file launcher with pause at exit
SetLocal EnableDelayedExpansion
Title %~n0
CD /D "%~dp0"
If /I "%1"=="Minimized" (
Start /Min Cmd /C "%~dpnx0 PauseErrorOnly"
Exit
)
@NullPointerMaker
NullPointerMaker / PowerShell.Cmd
Last active March 14, 2021 16:29
PowerShell Launcher
@Echo Off
Rem PS1 script launcher
Rem PS1 file can not exec directly so need launcher
Rem Use parameter Minimized to start in minimized window mode
Rem Use parameter Hidden to start in hidden window mode
Rem The other parameters will be passed to the PS1 script
SetLocal EnableDelayedExpansion
Title %~n0
CD /D "%~dp0"
Set Path=!Path!;!SystemRoot!\System32\WindowsPowerShell\v1.0\
@NullPointerMaker
NullPointerMaker / DynamicRoutingSystem.md
Created January 11, 2021 16:09
动态路由分流系统

系统对外是全局代理。

Socks/HTTP 代理

IP 请求

若在忽略列表中则直连,否则查询 IP 位置:
若为境内 IP 则直连, 否则查询 IP 是否已在代理列表中:
若 IP 在列表中则远程代理,否则直连,等待直连结果:
若直连正常返回则结束,否则尝试远程代理:
若远程代理断开或重置则结束,否则将此 IP 添加进入代理列表。

域名请求

@NullPointerMaker
NullPointerMaker / SetTorIPExpireTime.md
Created January 11, 2021 16:03
设置 Tor 出口 IP 的时效

网上有很多文章说 Tor 配置文件 torrc 里的 MaxCircuitDirtiness 参数是更换 IP 的间隔。这是不对的。
https://2019.www.torproject.org/docs/tor-manual.html 写得很清楚,是链路是否重用的间隔。它们不一样。

在使用 Tor 时,Tor 会建立有入口节点有中间节点有出口节点的链路。而在已经建立链路的情况下,客户端新发起的请求会重用这个链路。
MaxCircuitDirtiness 参数的作用是设置链路在多久后不再受理新的请求。但请注意,如果这个链路上旧的请求尚未结束,例如长轮询、WebSocket,那么过期后它也不会断开,只是不再被新的请求使用。因此,会发生一直不更换链路的情况。

更换 IP,也就是更换出口节点。限制它的频率参数是 TrackHostExitsTrackHostExitsExpire
其中前者设置哪些域名、IP 需要控制节点时限。