【问题标题】:Protecting Socket when using Netty4 on Android with VPNservice在带有 VPN 服务的 Android 上使用 Netty4 时保护 Socket
【发布时间】:2017-09-13 18:05:32
【问题描述】:

我正在尝试使用 Android 中的内置 VpnService 来捕获流量并将其发送到远程服务器。我正在尝试使用Netty,但似乎陷入了僵局。

为了将数据从手机发送到服务器,我需要在套接字上调用 Protect(),否则我传输的所有数据都将被循环回 VpnService。但是我不确定在使用 Netty4 时是否可以获取 Socket 对象或其文件描述符。

【问题讨论】:

    标签: java android sockets netty android-vpn-service


    【解决方案1】:

    你需要扩展 NioSocketChannel 并覆盖 doConnect 方法:

    public class ProtectedNioSocketChannel extends NioSocketChannel {
    @Override
    protected boolean doConnect(SocketAddress remoteAddress, SocketAddress localAddress) throws Exception {
        SocketChannel ch = javaChannel();
        if(!VpnServiceHelper.protect(ch.socket())){
            Log.i(Tag, "Can't protect Socket");
            return false;
        }
        return super.doConnect(remoteAddress, localAddress);
    }
    

    和:

    Bootstrap b = new Bootstrap();
        b.group(localChannel.eventLoop())
                .channel(ProtectedNioSocketChannel.class)
                .handler(new ProxyRemoteHandler(localChannel, session))
                .option(ChannelOption.AUTO_READ, false);
        ChannelFuture f = b.connect(address);
    

    【讨论】:

      猜你喜欢
      • 2017-07-01
      • 2021-04-01
      • 2013-10-01
      • 2019-08-24
      • 2020-06-25
      • 2020-06-28
      • 2019-05-16
      • 2021-12-22
      • 2018-02-21
      相关资源
      最近更新 更多