有人研究过 NetworkExtension 咩?进来讨论下~

2019-11-13 18:52:39 +08:00
 ff031068

直接说正题吧,目前据我所知有两种代理转发形式: 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 的转发,难道也需要用这个库吗?

1176 次点击
所在节点    iDev
9 条回复
OneNian
2019-11-13 19:30:27 +08:00
NetworkExtension 是不是必须购买开发者账号才能开发?
ff031068
2019-11-13 19:52:10 +08:00
@OneNian emmm,我记得是,但是我的账号一直是开发者账号,没试过非开发者账号能不能玩,现在 xcode 是可以直接添加 NetworkExtension,所以我也不清楚需不需要开发者账号
ysc3839
2019-11-13 19:55:09 +08:00
因为那些代理服务器是 TCP 层的代理,而不是 IP 层的吧?另外准确来说不是依赖 tun2socks,而是依赖 LwIP,因为拿到了 IP 包要解析成 TCP 数据流发给服务器。
如果是 IP 层的那直接发就行了。
ff031068
2019-11-14 10:14:10 +08:00
@ysc3839 感谢大佬回复,我想知道 IP 包和 tcp 数据流有什么区别吗?我记得安卓就没这个问题
ff031068
2019-11-14 10:48:29 +08:00
@ysc3839 我查了下资料,IP 包是属于网络层,但是 tcp/udp 包是属于传输层,是 IP 包的上层,所以 iOS 需要依赖 lwip 把 IP 包解析为 tcp 或者 udp 包是吗?那么解析出来后,我是否也可以直接拿去转发而不需要 tun2socks ?
ysc3839
2019-11-14 12:10:17 +08:00
@ff031068 tun2socks 解析出来就是直接发给 socks 服务器。
ff031068
2019-11-14 14:45:08 +08:00
@ysc3839 其实应该说 tun2socks 是一个代理转发器,帮忙把 tcp 包转发到代理服务器,那么我也可以自己写一个 socket 链接来做这件事,不过好像没人这样做
ysc3839
2019-11-14 18:33:51 +08:00
@ff031068 tun2socks 做的是从 tun 设备中读取 IP 包,用 LwIP 解析后把数据发给 SOCKS 服务器,以及反方向接收的操作。
ff031068
2019-11-22 15:08:15 +08:00
嗯,反正我目前得出来的结论就是,tun2socks 不稳定,建议还是用 http 的代理模式,从网络的层面来讲,我用 NEKit 的框架直连,不走代理服务器,但是 tun2socks 还是很慢基本没法用,http 代理就完全没问题,按照 nekit 的思路,大部分数据( web,url,API )走 http 代理,socket 请求(非 80/443 端口)走 tun2socs

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

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

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

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

© 2021 V2EX