Tag Archives: shadowsocks

Potatso原理解析

更新:现在可用的Potatso源在这里:https://github.com/haxpor/Potatso 其实对于iOS而言,之前有shadowsocks-iOS这个项目,我有段时间也看了这个项目,当时没有仔细看源码,只是想把它跑起来看看,折腾了一阵虽然能够跑起来了,但是并不起作用。后来在美区下载了这个app试用了一下,还是只能在应用存活期间提供代理服务,缺陷是很明显的。clowwindy在apple宣布开放networkExtension后在这个页面讨论了一下network extension的使用方法,最后大批的留言让人感动。 前几天,icodesign开源了Potatso,我看了几天源码,了解了一下大概流程: 一、需要向apple申请networkExtension的使用权限,拿到权限entitlement文件之后,需要安装一个Xcode网络扩展模版插件,地址在: /System/Library/Frameworks/NetworkExtension.framework/Resources/NEProviderTargetTemplate.pkg。 二、 安装完之后可以在Xcode新建Application Extension模版。此段参考iOS 9 VPN API – The Definitive Guide to Network Extension API NEPacketTunnelProvider and NWUDPSession。网上有对应的中文版,这里就贴英文原文吧,mac sierra上这个安装包找不到了,官方推荐的做法在这里https://forums.developer.apple.com/thread/65265。 三、之前提到过shadowsocks-iOS被系统杀死后就不能提供代理服务了, 上一条提到的Application Extension就突破了这一局限,即使app被杀死,Application Extension依然会在后台运行。持续为设备过来的数据提供代理。下面就说一下代码层面上到底是怎么实现的 四、Potatso首先会将用户的shadowsocks服务器信息存起来,用户选中某项shadowsocks配置后点击连接,Potatso会首先调用Manager.swift的”regenerateConfigFiles”方法,保存了4个配置: 保存用户定义的DNS; 生成一个antinat服务器需要的XML配置文件并保存起来,antinat是一个socks服务器,用来将需要代理的socks流量导向设备上和shadowsocks服务器连接的端口;… Read more »