V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iOS 开发实用技术导航
NSHipster 中文版
http://nshipster.cn/
cocos2d 开源 2D 游戏引擎
http://www.cocos2d-iphone.org/
CocoaPods
http://cocoapods.org/
Google Analytics for Mobile 统计解决方案
http://code.google.com/mobile/analytics/
WWDC
https://developer.apple.com/wwdc/
Design Guides and Resources
https://developer.apple.com/design/
Transcripts of WWDC sessions
http://asciiwwdc.com
Cocoa with Love
http://cocoawithlove.com/
Cocoa Dev Central
http://cocoadevcentral.com/
NSHipster
http://nshipster.com/
Style Guides
Google Objective-C Style Guide
NYTimes Objective-C Style Guide
Useful Tools and Services
Charles Web Debugging Proxy
Smore
ff031068
V2EX  ›  iDev

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

  •  
  •   ff031068 ·
    chenfengfeng · 2019-11-13 18:52:39 +08:00 · 1355 次点击
    这是一个创建于 1837 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    9 条回复    2019-11-22 15:08:15 +08:00
    OneNian
        1
    OneNian  
       2019-11-13 19:30:27 +08:00
    NetworkExtension 是不是必须购买开发者账号才能开发?
    ff031068
        2
    ff031068  
    OP
       2019-11-13 19:52:10 +08:00
    @OneNian emmm,我记得是,但是我的账号一直是开发者账号,没试过非开发者账号能不能玩,现在 xcode 是可以直接添加 NetworkExtension,所以我也不清楚需不需要开发者账号
    ysc3839
        3
    ysc3839  
       2019-11-13 19:55:09 +08:00 via Android
    因为那些代理服务器是 TCP 层的代理,而不是 IP 层的吧?另外准确来说不是依赖 tun2socks,而是依赖 LwIP,因为拿到了 IP 包要解析成 TCP 数据流发给服务器。
    如果是 IP 层的那直接发就行了。
    ff031068
        4
    ff031068  
    OP
       2019-11-14 10:14:10 +08:00
    @ysc3839 感谢大佬回复,我想知道 IP 包和 tcp 数据流有什么区别吗?我记得安卓就没这个问题
    ff031068
        5
    ff031068  
    OP
       2019-11-14 10:48:29 +08:00
    @ysc3839 我查了下资料,IP 包是属于网络层,但是 tcp/udp 包是属于传输层,是 IP 包的上层,所以 iOS 需要依赖 lwip 把 IP 包解析为 tcp 或者 udp 包是吗?那么解析出来后,我是否也可以直接拿去转发而不需要 tun2socks ?
    ysc3839
        6
    ysc3839  
       2019-11-14 12:10:17 +08:00 via Android
    @ff031068 tun2socks 解析出来就是直接发给 socks 服务器。
    ff031068
        7
    ff031068  
    OP
       2019-11-14 14:45:08 +08:00
    @ysc3839 其实应该说 tun2socks 是一个代理转发器,帮忙把 tcp 包转发到代理服务器,那么我也可以自己写一个 socket 链接来做这件事,不过好像没人这样做
    ysc3839
        8
    ysc3839  
       2019-11-14 18:33:51 +08:00
    @ff031068 tun2socks 做的是从 tun 设备中读取 IP 包,用 LwIP 解析后把数据发给 SOCKS 服务器,以及反方向接收的操作。
    ff031068
        9
    ff031068  
    OP
       2019-11-22 15:08:15 +08:00
    嗯,反正我目前得出来的结论就是,tun2socks 不稳定,建议还是用 http 的代理模式,从网络的层面来讲,我用 NEKit 的框架直连,不走代理服务器,但是 tun2socks 还是很慢基本没法用,http 代理就完全没问题,按照 nekit 的思路,大部分数据( web,url,API )走 http 代理,socket 请求(非 80/443 端口)走 tun2socs
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2643 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 03:00 · PVG 11:00 · LAX 19:00 · JFK 22:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.