我发现我的电脑上,大多数流量都是 http/https 流量,对于不使用 http/https 协议的软件,基本都能在客户端设置里面代理地址,比如邮件客户端、BT 类下载工具都有提供一个设置代理的选项,因此这一类软件根据自己需要配置即可。
日常办公中,需要代理的情况原因主要有两个,一个是请求地址被墙的必须用到代理,另外一个是请求的地址没有被墙,但是下载速度奇慢无比需要代理服务器加速,主要是各种包管理器用到的软件源。其他理由可能包括匿名性的需求,这个对我而言不是要紧。
网上有很多成熟的客户端,但是考虑到如果一个软件的配置文件行数多到足够我重新写一个新的小工具,为什么不自己写一个呢,当然使用 Go 编写的。
事实上,我没花多少时间就写了一个 Go 版本的 demo ,使用 nftable 配置转发所有 80/443 端口的流量到指定端口,然后分析请求,对于 http 是明文请求获取 Host 字段就是主机名,https 请求自己解析扩展信息 SNI 也可以获取到主机名。
后来觉得 Go 占用资源而且我又开始学习 Rust 了,就用 Rust 重新编写了这个程序,算是我的第一个 Rust 作品。因为电脑上的所有网页请求都需要经过这个程序,所以在各种方方面面我都想着能简单就简单,用最少的资源完成我需求。
分流策略比较简单,基于哈希表将每个主机名分割成不同的部分,比如 example.com 这个域名会以com ⇒ example ⇒ null
这种格式存储,对于域名下面的所有子域名也都会命中策略。
因为是自用的工具,维护一套完整的代理列表不太现实,所以就网络上找了个网址列表,自己转换一下导入进去。不过分流策略的准确性直接影响到上网冲浪的体验,写死的分流策略不怎么好用,我都是遇到网络错误,然后现场把主机名添加进去,在切换回工作现场,再试一次。
简单说就是我创建了一个命名管道,然后每次遇到需要临时代理的主机名,就打开终端:
echo "example.com" > /named-pipe-path
目前我这个程序已经用来有一年多了,基本满足日常工作过程中特殊的网络需求,近半年来没有出现过任何崩溃的情况。
具体的用法的介绍可以查看项目 README.md。
同时我目前在深圳寻找一份工作,欢迎大佬点评简历:/t/933572
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.