使用VPNservice在Android上使用Netty4时保护套接字

时间:2017-04-18 03:21:34

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

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

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

1 个答案:

答案 0 :(得分:0)

您需要扩展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);