Specht--开源的基于 Network Extension 的 Mac 版代理

2016-08-12 13:41:55 +08:00
 nbndco

之前写了一个 iOS/macOS 的库,NEKit,还在更新。功能可以自己看,简单点说就是封装了 Surge iOS 的核心功能,包括 tun2socks 。

有一些人想要一个 demo ,所以就把一个我自己写的之前用了很久的代理软件的界面基于 NEKit 写了一个。 功能可以比照 Surge 的核心功能,我就不列了。

Specht 有两个版本。

Specht是基于 Network Extension 的。可以自动设置代理,可以转发所有的 TCP 流,包括所有不支持代理的软件。但是苹果的限制是 Developer ID 是不能签名需要 Network Extension 的应用的,想要用 Specht ,必须要自己用有 Network Extension 权限(需要单独申请,免费)的开发者账户( 99 刀),或者我发布到 Mac App Store 。所以想要用的话,至少你要有开发者账户,然后自行编译签名。你应该可以注意到,不同于 iOS , Surge 的 Mac 版也是不基于 Network Extension 的。所以在这个意义上, Specht 的功能比 Surge 的 Mac 版要强,当然我是希望 Surge 直接基于 Network Extension 上架 App Store 的(这样我估计我也没动力更新 Specht 了),当然别卖 648 就好。 iOS 上的 Surge 很棒(虽然曾经很不稳定),所以我对于写一个 Specht 的 iOS 版完全没有任何动力。

但考虑到这样就几乎没人能用,所以又有了SpechtLite。这个版本可以直接下载,人人可用。不基于 Network Extension 的问题是不能自动设置代理,只有支持代理的应用才能使用,但是如果 Surge 的 Mac 版够用的话,那么 SpechtLite 也是够用的。

如何选择:

  1. 有开发者账户并且有 Network Extension 的权限 -> Specht
  2. 只是想有个基于规则的代理,并且有 Surge 的 iOS 版 -> Mac 版的 Surge
  3. 只是想有个基于规则的代理,没有 Surge 想要 Mac 版的 Surge 的功能但是不在意没有华丽的 GUI -> SpechtLite
  4. 什么都想要而且还不想花钱的,你可以看着 Specht 基于 NEKit 自己写一个。有了 NEKit 其实也就是界面写起来比较烦心

有问题的话可以去 Gitter 问

19347 次点击
所在节点    macOS
92 条回复
nbndco
2016-08-18 06:50:51 +08:00
@WildCat BSD
tys
2016-08-23 09:16:18 +08:00
@ nbndco 感谢,已经用上了,挺不错的
ProfFan
2016-08-24 11:21:42 +08:00
@nbndco 这方面的先例就是 VLC 了,可以参考。 VLC 采取的是整体迁移到 LGPL 的办法。
http://blog.tai2.net/lgpl_and_appstore.html#id10
chztv
2016-09-08 13:24:33 +08:00
@nbndco 楼主你好,配置中的 directlist directiprange 两个 List 文件能提供吗?
nbndco
2016-09-08 13:32:04 +08:00
@chztv ……你自己写啊,不需要可以直接把 rule 删掉,说明里也有写这两个文件应该怎么写的,就是一行一个 ip 或者正则
iWill
2016-09-09 10:42:58 +08:00
谢谢 lz 分享这么好的 app 。

有个问题请教,就是 SpechtLite 可以像 surge for mac 那样屏蔽广告么?
还有就是规则和 surge 是不通用的么?

thanks
nbndco
2016-09-09 10:52:51 +08:00
@iWill 规则不通用,想屏蔽广告的话建个广告域名的 list 转发到 reject 这个类型的 adapter 去。
iWill
2016-09-09 11:08:50 +08:00
谢谢告知, NSRegularExpression 这些正则对于我这些 it 盲来说真心看不懂。
顺便问问能否作者出个 sample 出来,例如类似:

DOMAIN-KEYWORD,cnzz,REJECT
DOMAIN-SUFFIX,3600.com,REJECT
DOMAIN-KEYWORD,youtube,Proxy,force-remote-dns

的怎么表达, 因为一直用的 surge ,所以目前转到 SpechtLite 规则有一些不懂怎么转, thanks
nbndco
2016-09-09 16:48:06 +08:00
@iWill 我随便写一下,你自己理解下:
大致上你需要先定义两个 adapter :
- id: proxy
type: http/ss 你自己看
- id: reject
type: reject

然后定义两个 rule
- type: list
file: reject_list
adapter: reject
- type: list
file: whitelist
adapter: proxy

然后在 reject_list 里:
cnzz
3600\.com$

在 whitelist 里:
youtube

要是有人愿意写教程就好了,我真的没这个心情和时间
nbndco
2016-09-09 16:48:51 +08:00
@iWill 格式有点乱了,你理解一下就好
chztv
2016-09-09 17:05:43 +08:00
@iWill 这个的规则和 Surge 还是差的比较大,原来以为可以搞个 gfwlist 直接用,一看作者整的格式和 gfwlist 还不一样,唉……
只能下载用最简单的规则试用了下,用肯定是能用,参照了作者 Github 上的配置文件,没有单独配置 list 文件。
最好是有像 Scomper 老师这样的牛人,能整个直接用的配置文件。
nbndco
2016-09-09 18:07:35 +08:00
@chztv 其实 SpechtLite 都不是我的本意,而是 NEKit 的副产品,我本身只是把它作为一个 demo 而已。
NEKit 的文档明确指出不建议使用自带的配置文件, NEKit 提供的是功能,配置方式应该由 App 自行处理。 SpechtLite 当前使用的配置文件其实只是 NEKit 提供来快速构建原型用的。
当然我可以直接去支持 gfwlist ,第一我本人不用这种体验不好的方式,毕竟被封的很多网站并不再列表中,还有很多基本无法正常访问的未被封网站,第二支持 gfwlist 本身不符合 NEKit 的设计理念,一个构建原型的组件为何要支持如此复杂的功能?如果 App 想要支持 gfwlist ,那么应当由它自行完成,如果处理过程中需要 NEKit 提供一些通用的基本功能,那么 NEKit 可以实现。
但支持 gfwlist 就意味着 SpechtLite 开始提供超越了 demo 的功能了,这样的话 SpechtLite 需要的改进就太多了, NEKit 本身就有很多的事情还要做,外加我还有很多其他的事情,所以……
iWill
2016-09-09 18:21:16 +08:00
@nbndco @chztv

非常感谢 两位 的解说,我的已经弄好了, so far so good.

再次感谢。
iWill
2016-09-11 22:58:55 +08:00
@nbndco 今天发现个问题,就是 .SpechtLite 目录如果有多个 .yaml 设置文件。选单里排序很有问题,不是按字母/数字排序,而是乱排序。

希望这个小 bug 能够 fix ,谢谢。
nbndco
2016-09-12 15:25:50 +08:00
@iWill 嗯。谢谢建议
jefby
2016-09-14 20:18:24 +08:00
赞👍!很想试试 Specht 啊,但是证书一直申请不下来,太慢了。。
lzs5240
2016-09-15 00:29:12 +08:00
这个怎么在配置中配置某个 App 呀? 例如 Mail 走代理
nbndco
2016-09-15 07:45:09 +08:00
@lzs5240 不能
DylanWu
2016-09-27 21:43:17 +08:00
@tys 编译总是失败,想请教一下
yangpai
2016-10-18 11:57:08 +08:00
同一个 ss 服务端,用 spechtlite 比较慢, 不知道啥原因。 用其他客户端就好一点。

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

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

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

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

© 2021 V2EX