V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
sm1314
V2EX  ›  Android

有人在 Android 中使用过 Netty 框架吗?

  •  
  •   sm1314 · 2020-02-10 16:01:26 +08:00 · 6053 次点击
    这是一个创建于 1529 天前的主题,其中的信息可能已经有所发展或是发生改变。

    小弟使用 Android 提供 VpnSerivce+Netty 框架开发一个全局网络代理 App 时遇到一个问题,就是需要用 VpnService.protect 一下最外层联网 channel 对应的 socket,不然 App 本身发出的数据包会被转发到 Tun 网卡,导致无限循环无网络。

    对于直连外网的需求,我们可以通过反射来获取 channel 对应的 socket,并在 Bootstrap 那里直接 Protect:

        public static void protectChannel(Channel channel) {
            try {
                NioSocketChannel nioSocketChannel = (NioSocketChannel) channel;
                SocketChannel javaSocketChannel = (SocketChannel) getJavaSocketChannelMethod.invoke(nioSocketChannel);
                LocalVpnService.newInstance().protect(javaSocketChannel.socket());
            } catch (Exception e) {
                Log.d("NettySocks", "protectChannel: " + e.getMessage());
                e.printStackTrace();
            }
        }
    

    但对于非直连外网,即我要在 pipeline 的末端加一个 Netty 自带的 HttpProxyHandler,给网络套一层 Http 代理时,怎么找到这个 HttpProxyHandler 对应的 socket 进行 Protect 呢?

    1 条回复    2020-02-14 13:29:17 +08:00
    mightofcode
        1
    mightofcode  
       2020-02-14 13:29:17 +08:00
    把 HttpProxyHandler 的源码复制一份,自己改改

    没试过,或许能成功
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5381 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 08:26 · PVG 16:26 · LAX 01:26 · JFK 04:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.