Java 在带有VPN服务的Android上使用Netty4时保护套接字

Java 在带有VPN服务的Android上使用Netty4时保护套接字,java,android,sockets,netty,android-vpn-service,Java,Android,Sockets,Netty,Android Vpn Service,我正在尝试使用Android中内置的VPN服务来捕获流量并将其发送到远程服务器。我试图使用Netty,但似乎我已经陷入了僵局 为了将数据从手机发送到服务器,我需要在套接字上调用Protect(),否则我传输的所有数据都将被循环回VPN服务。但是,我不确定在使用Netty4时是否可以获得套接字对象或其文件描述符。您需要扩展NioSocketChannel并覆盖DoConnection方法: public class ProtectedNioSocketChannel extends NioSock

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


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

您需要扩展NioSocketChannel并覆盖DoConnection方法:

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);
}
以及:


您需要扩展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);
}
以及: