java - 在 Android 上使用 Netty4 和 VPN 服务时保护套接字

标签 java android sockets netty android-vpn-service

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

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

最佳答案

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

关于java - 在 Android 上使用 Netty4 和 VPN 服务时保护套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43463044/

相关文章:

java - Google Play 服务位置 API - 计算距离

javascript - 安卓 WebView "Uncaught SyntaxError: Unexpected token ILLEGAL"

java - 异步套接字延迟

c# - FTP监控和新文件下载

java - 在 Java 中是否可以覆盖 Objects 数组的 'toString'?

java - 向 void 方法添加返回参数会破坏现有功能吗?

java - 解析谷歌日历时SAX解析异常

android - 我如何知道 BLE 扫描是否正在进行?

java - 如何读取套接字流中接收器上的字节(java)

java - logback配置的密码加密/解密