我正在尝试使用 Android 中的内置 VpnService 来捕获流量并将其发送到远程服务器。我正在尝试使用Netty,但似乎陷入了僵局。
为了将数据从手机发送到服务器,我需要在套接字上调用 Protect(),否则我传输的所有数据都将被循环回 VpnService。但是我不确定在使用 Netty4 时是否可以获取 Socket 对象或其文件描述符。
我正在尝试使用 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);