直接说正题吧,目前据我所知有两种代理转发形式:
1.http 转发,利用 NetworkExtension 的 API,让系统的 http 和 https 走本地创建的 http 代理服务器,拿到 http 包去转发。
2.tcp/udp 转发,从系统提供的 API open func readPackets(completionHandler: @escaping ([Data], [NSNumber]) -> Void)
读取到的 packet 包,进行转发。
然后我的问题是这样的,我查过资料,tcp 包的转发,目前来说都需要依赖 tun2socks 的这个第三方库。tcp 包里面应该是 IP 包,难道不能直接发送到代理服务器吗?为什么需要用这个库?这个库目前来说听说还是不稳定,而且问题很多。如果只是基于 socks5 的转发,难道也需要用这个库吗?
1
OneNian 2019-11-13 19:30:27 +08:00
NetworkExtension 是不是必须购买开发者账号才能开发?
|
2
ff031068 OP @OneNian emmm,我记得是,但是我的账号一直是开发者账号,没试过非开发者账号能不能玩,现在 xcode 是可以直接添加 NetworkExtension,所以我也不清楚需不需要开发者账号
|
3
ysc3839 2019-11-13 19:55:09 +08:00 via Android
因为那些代理服务器是 TCP 层的代理,而不是 IP 层的吧?另外准确来说不是依赖 tun2socks,而是依赖 LwIP,因为拿到了 IP 包要解析成 TCP 数据流发给服务器。
如果是 IP 层的那直接发就行了。 |
5
ff031068 OP @ysc3839 我查了下资料,IP 包是属于网络层,但是 tcp/udp 包是属于传输层,是 IP 包的上层,所以 iOS 需要依赖 lwip 把 IP 包解析为 tcp 或者 udp 包是吗?那么解析出来后,我是否也可以直接拿去转发而不需要 tun2socks ?
|
7
ff031068 OP @ysc3839 其实应该说 tun2socks 是一个代理转发器,帮忙把 tcp 包转发到代理服务器,那么我也可以自己写一个 socket 链接来做这件事,不过好像没人这样做
|
8
ysc3839 2019-11-14 18:33:51 +08:00
@ff031068 tun2socks 做的是从 tun 设备中读取 IP 包,用 LwIP 解析后把数据发给 SOCKS 服务器,以及反方向接收的操作。
|
9
ff031068 OP 嗯,反正我目前得出来的结论就是,tun2socks 不稳定,建议还是用 http 的代理模式,从网络的层面来讲,我用 NEKit 的框架直连,不走代理服务器,但是 tun2socks 还是很慢基本没法用,http 代理就完全没问题,按照 nekit 的思路,大部分数据( web,url,API )走 http 代理,socket 请求(非 80/443 端口)走 tun2socs
|